You can also pass inn options to wrap-json-body so you don't have to use 
keywordize-keys:

(def app
  (wrap-json-body handler {:keywords? true :bigdecimals? true}))


kl. 12:04:10 UTC+2 tirsdag 6. mai 2014 skrev Ivan Schuetz følgende:
>
> Thanks. I just found out that my middlewares work, I just had to reorder 
> them like this:
>
> (def app
>   (->
>       (handler/api app-routes)
>          (friend/authenticate {:credential-fn (partial 
> creds/bcrypt-credential-fn users)
>                             :login-url "/login"
>                             :workflows [
>                                         (ajax-login)
>                                         ]})
>
>       (format/wrap-restful-format)
>             
>       (middleware/wrap-json-body)
>       (middleware/wrap-json-params)
>       (middleware/wrap-json-response)
>
>       )
>   )
>
> Now I don't need slurp... still had to change this line in ajax-login, 
> since the format using these middlewares is a bit different:
>
>               (if-let [{:keys [username password] :as creds} (get-in 
> request [:params :json-params])]
>
> with:
>
>               (if-let [{:keys [username password] :as creds} 
> (clojure.walk/keywordize-keys(:json-params request))]
>
>
>
>
>
>
> Am Dienstag, 6. Mai 2014 08:03:47 UTC+2 schrieb Erik Bakstad:
>>
>> We're using a custom jsonparam-extractor middleware that basically does 
>> this:
>>
>> (update-in req [:params] assoc :json-params (read-json (slurp (:body 
>> req)) true))
>>
>> I should probably have clarified this, sorry.
>>
>> Also, we're not using interactive-form so I haven't tested if the two 
>> workflows work together. It shouldn't be a problem to make them work 
>> together though.
>>
>> kl. 02:31:30 UTC+2 tirsdag 6. mai 2014 skrev Ivan Schuetz følgende:
>>>
>>> Sorry. I mean accepts the request map as an argument. This map doesn't 
>>> contain the parameters.
>>>
>>>
>>> Am Dienstag, 6. Mai 2014 02:17:52 UTC+2 schrieb Ivan Schuetz:
>>>>
>>>> The snippet provided by Eric doesn't use the body... it returns a 
>>>> function that accepts params as argument, but they were not being 
>>>> passed... 
>>>> body was set instead, that's why I added slurp.
>>>>
>>>> So maybe there's something wrong with the 
>>>>  (middleware/wrap-json-params), because it's evidently not having effect.
>>>>
>>>>
>>>> Am Dienstag, 6. Mai 2014 01:18:54 UTC+2 schrieb Sam Ritchie:
>>>>>
>>>>>     (middleware/wrap-json-params) slurps the body up completely - this 
>>>>> is a mutation, so you won't be able to access the body again.
>>>>>
>>>>>   Ivan Schuetz
>>>>>  May 5, 2014 3:49 PM
>>>>> Concerning the workflow with the ajax-login... for some reason the 
>>>>> middleware to set params with json body of my POST isn't working.
>>>>>
>>>>> As a workaround I added this to ajax-login, to parse the params:
>>>>>
>>>>> (checore/parse-string (slurp (:body request)) true)      
>>>>>
>>>>>
>>>>>
>>>>> I had also to remove the interactive-form workflow I had... now my 
>>>>> middleware looks like this:
>>>>>
>>>>>
>>>>>        (friend/authenticate {:credential-fn (partial 
>>>>> creds/bcrypt-credential-fn users)
>>>>>                             :login-url "/login"
>>>>>                             :workflows [
>>>>>                                         (ajax-login)
>>>>>                                         ]})
>>>>>
>>>>>
>>>>>
>>>>> I do have the middlewares supposedly responsible for setting :params 
>>>>> ... not idea why this is not being done. This is the complete block:
>>>>>
>>>>> (def app
>>>>>   (->
>>>>>       (handler/api app-routes)
>>>>>
>>>>>       (format/wrap-restful-format)
>>>>>             
>>>>>       (middleware/wrap-json-body)
>>>>>       (middleware/wrap-json-params)
>>>>>       (middleware/wrap-json-response)
>>>>>
>>>>>        (friend/authenticate {:credential-fn (partial 
>>>>> creds/bcrypt-credential-fn users)
>>>>>                             :login-url "/login"
>>>>>                             :workflows [
>>>>>                                         (ajax-login)
>>>>>                                         ]})
>>>>>
>>>>>       )
>>>>>   )
>>>>>
>>>>> But well, it works for now.
>>>>>
>>>>>
>>>>>
>>>>> Am Freitag, 25. April 2014 18:53:42 UTC+2 schrieb Ivan Schuetz:
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Clojure" group.
>>>>> To post to this group, send email to clo...@googlegroups.com
>>>>> Note that posts from new members are moderated - please be patient 
>>>>> with your first post.
>>>>> To unsubscribe from this group, send email to
>>>>> clojure+u...@googlegroups.com
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/clojure?hl=en
>>>>> --- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "Clojure" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to clojure+u...@googlegroups.com.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>   Ivan Schuetz
>>>>>  April 25, 2014 10:53 AM
>>>>> Also I couldn't find which library you're using for "get-headers" 
>>>>> function... or is it a self made one?
>>>>>
>>>>> I found a get-headers in ring-servlet...
>>>>> https://github.com/ring-clojure/ring/tree/master/ring-servlet
>>>>>
>>>>> Added this dependency [ring/ring-servlet "1.3.0-beta1"] didn't work
>>>>>
>>>>> And also in a netty adapter library
>>>>>  [ring-netty-adapter "0.0.3"]
>>>>>
>>>>> Also didn't work... for now I commented this line out, since it's not 
>>>>> necessary to get my curl test working. But it would be nice if you 
>>>>> provide 
>>>>> the dependencies.
>>>>>
>>>>>
>>>>>
>>>>> Am Donnerstag, 24. April 2014 08:51:29 UTC+2 schrieb Erik Bakstad:
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Clojure" group.
>>>>> To post to this group, send email to clo...@googlegroups.com
>>>>> Note that posts from new members are moderated - please be patient 
>>>>> with your first post.
>>>>> To unsubscribe from this group, send email to
>>>>> clojure+u...@googlegroups.com
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/clojure?hl=en
>>>>> --- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "Clojure" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to clojure+u...@googlegroups.com.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>   Erik Bakstad
>>>>>  April 24, 2014 12:51 AM
>>>>> Here is an example from our ajax-login form. After reading Sam's 
>>>>> excellent writeup it should be understandable.
>>>>>
>>>>> https://gist.github.com/ebaxt/11244031
>>>>>
>>>>> kl. 00:28:45 UTC+2 torsdag 24. april 2014 skrev Ivan Schuetz følgende:
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Clojure" group.
>>>>> To post to this group, send email to clo...@googlegroups.com
>>>>> Note that posts from new members are moderated - please be patient 
>>>>> with your first post.
>>>>> To unsubscribe from this group, send email to
>>>>> clojure+u...@googlegroups.com
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/clojure?hl=en
>>>>> --- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "Clojure" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to clojure+u...@googlegroups.com.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>   Ivan Schuetz
>>>>>  April 23, 2014 4:28 PM
>>>>> Hi,
>>>>>
>>>>> I'm trying to get a simple use case running - send a login request to 
>>>>> /login and get success or fail response, preferably in JSON format.
>>>>>
>>>>> I followed the example in https://github.com/cemerick/friend#workflows
>>>>>
>>>>>
>>>>> (def users {"root" {:username "root"
>>>>>                     :password (creds/hash-bcrypt "admin_password")
>>>>>                     :roles #{::admin}}
>>>>>             "jane" {:username "jane"
>>>>>                     :password (creds/hash-bcrypt "test")
>>>>>                     :roles #{::user}}})
>>>>>
>>>>>
>>>>> (defroutes app-routes
>>>>>
>>>>>   (GET "/test" [] {:body {:my-map "helo"}})
>>>>>   
>>>>>   (route/resources "/")
>>>>>   
>>>>>   (route/not-found "Not found"))
>>>>>
>>>>> (def app
>>>>>   (->
>>>>>       (handler/api app-routes)
>>>>>       (middleware/wrap-json-body)
>>>>>       (middleware/wrap-json-response)
>>>>>
>>>>>        (friend/authenticate {:credential-fn (partial 
>>>>> creds/bcrypt-credential-fn users)
>>>>>                             :workflows [
>>>>>                                         (workflows/interactive-form)]})
>>>>>       )
>>>>>   )
>>>>>
>>>>>
>>>>>
>>>>> I'm testing with curl:
>>>>>
>>>>> curl -v --data "username=jane&password=test" 
>>>>> http://localhost:3000/login
>>>>>
>>>>> Or:
>>>>>
>>>>> curl -v --request POST  "
>>>>> http://localhost:3000/login?username=jane&password=test";
>>>>>
>>>>> And I get:
>>>>>
>>>>> * About to connect() to localhost port 3000 (#0)
>>>>> *   Trying ::1...
>>>>> * connected
>>>>> * Connected to localhost (::1) port 3000 (#0)
>>>>> > POST /login?username=jane&password=test HTTP/1.1
>>>>> > User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 
>>>>> OpenSSL/0.9.8y zlib/1.2.5
>>>>> > Host: localhost:3000
>>>>> > Accept: */*
>>>>> > 
>>>>> < HTTP/1.1 302 Found
>>>>> < Date: Wed, 23 Apr 2014 22:25:15 GMT
>>>>> < Location: http://localhost:3000/login?&login_failed=Y&username=
>>>>> < Content-Length: 0
>>>>> < Server: Jetty(7.6.8.v20121106)
>>>>> < 
>>>>> * Connection #0 to host localhost left intact
>>>>> * Closing connection #0
>>>>>
>>>>>
>>>>> This looks like authentication failed, but the data is correct. I 
>>>>> reviewed the curl request, and this seems to be the correct way to send a 
>>>>> POST. But &username= gives me the impression it's not being parsed 
>>>>> correctly.
>>>>>
>>>>> Also, how can I get a JSON response instead of only a header?
>>>>>
>>>>> Thanks.
>>>>>
>>>>> P.S. Maybe it would be positive if this library has an own Google 
>>>>> Group.
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Clojure" group.
>>>>> To post to this group, send email to clo...@googlegroups.com
>>>>> Note that posts from new members are moderated - please be patient 
>>>>> with your first post.
>>>>> To unsubscribe from this group, send email to
>>>>> clojure+u...@googlegroups.com
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/clojure?hl=en
>>>>> --- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "Clojure" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to clojure+u...@googlegroups.com.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>  
>>>>>
>>>>> -- 
>>>>> Sam Ritchie (@sritchie)
>>>>> Paddleguru Co-Founder
>>>>> 703.863.8561
>>>>> www.paddleguru.com
>>>>> Twitter <http://twitter.com/paddleguru> // 
>>>>> Facebook<http://facebook.com/paddleguru>
>>>>>  
>>>>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to