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.