Friend requires some ring middleware, including the keyword params
middleware. Not having it included in your app will produce this. If you
are using Compojure's handler middlewares, this is done for you.
This particular example is broken because you're applying the middleware
in the wrong order. Try:
(-> app-routes
(friend/authenticate ...)
handler/api)
Any Friend questions can be posted to the clojure-sec ML, where they'll
get more attention.
Thanks,
- Chas
On 04/23/2014 06:27 PM, Ivan Schuetz wrote:
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 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 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
<mailto:clojure+unsubscr...@googlegroups.com>.
For more options, visit https://groups.google.com/d/optout.
--
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.