I was wrong, sorry. Looking at the code for c.f.workflows/interactive-form,
you can indeed see where it intercepts a POST request to the provided
:login-uri (lines 84-85 on current master).

Which means I have absolutely no idea why it gives you a 404, except maybe
if it is related to the other point about the order of middlewares.

Sorry for the confusion.

On Wednesday, 6 August 2014, Jonathon McKitrick <[email protected]>
wrote:

> I'm confused.  None of the examples shown implemented the login POST
> handler.  The docs implied it was already part of the middleware:
>
> From https://github.com/cemerick/friend :
> >>>
> The example above defines a single workflow — one supporting the POSTing
> of :username and :password parameters to (by default) /login — which will
> discover the specified :credential-fn and use it to validate submitted
> credentials.
> <<<
>
>
> --
> Jonathon McKitrick
>
>
> On Wed, Aug 6, 2014 at 10:46 AM, Gary Verhaegen <[email protected]
> <javascript:_e(%7B%7D,'cvml','[email protected]');>> wrote:
>
>> 1. No, you have to provide it (as a non-protected route, obviously).
>> 2. The order in which you apply the handler/site and friend/authenticate
>> middlewares is reversed: friend needs the session (and others), so it
>> should come "after" (or rather "within") the handler/site to work properly
>> (in execution order).
>>
>>
>> On Wednesday, 6 August 2014, Jonathon McKitrick <[email protected]
>> <javascript:_e(%7B%7D,'cvml','[email protected]');>> wrote:
>>
>>>  First, the code:
>>>
>>> (ns pts.server
>>>   (:use [compojure.core])
>>>   (:require [ring.adapter.jetty :as jetty]
>>>             [ring.util.response :as response]
>>>             [compojure.handler :as handler]
>>>             [compojure.route :as route]
>>>             [cemerick.friend :as friend]
>>>             (cemerick.friend [workflows :as workflows]
>>>                              [credentials :as creds])))
>>>
>>> (defroutes www-routes
>>>   (GET "/locked" [] (friend/authorize #{::admin} "Admin only"))
>>>   (GET "/home" [] (response/file-response "home.html" {:root
>>> "resources/public"}))
>>>   (GET "/login" [] (response/file-response "login.html" {:root
>>> "resources/public"}))
>>>   (GET "/" [] (response/redirect "index.html"))
>>>   (route/resources "/")
>>>   (route/not-found "Not Found"))
>>>
>>> (def app (handler/site www-routes))
>>>
>>> (def users {"root" {:username "root"
>>>                     :password (creds/hash-bcrypt "toor")
>>>                     :roles #{::admin}}})
>>>
>>> (def secure-app
>>>   (-> app
>>>       (friend/authenticate {:unauthorized-handler #(response/status
>>> (response/response "NO") 401)
>>>                             :credential-fn (partial
>>> creds/bcrypt-credential-fn users)
>>>                             :workflows [(workflows/interactive-form)]})))
>>>
>>> (defn -main [& args]
>>>   (let [port (Integer/parseInt (get (System/getenv) "PORT" "3000"))]
>>>     (jetty/run-jetty secure-app {:port port :join? false})))
>>>
>>> It's dead simple, but 2 major things are not working.
>>>
>>> 1.  The POST to /login to submit the login form gives a 404 Not Found.
>>> Isn't the POST handler part of the friend/authenticate middleware?
>>> 2.  Attempts to access the /locked URL throw an exception and a
>>> stacktrace, rather than calling the unauthorized handler:
>>> throw+: {:cemerick.friend/required-roles #{:pts.server/admin},
>>> :cemerick.friend/exprs ["Admin only"], :cemerick.friend/type :unauthorized,
>>> :cemerick.friend/identity nil}
>>>
>>> What am I doing wrong here?
>>>
>>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to [email protected]
>>> Note that posts from new members are moderated - please be patient with
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> [email protected]
>>> 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 [email protected].
>>>
>>> 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 [email protected]
>> <javascript:_e(%7B%7D,'cvml','[email protected]');>
>> Note that posts from new members are moderated - please be patient with
>> your first post.
>> To unsubscribe from this group, send email to
>> [email protected]
>> <javascript:_e(%7B%7D,'cvml','clojure%[email protected]');>
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> ---
>> You received this message because you are subscribed to a topic in the
>> Google Groups "Clojure" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/clojure/yk32Imtd5u8/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> [email protected]
>> <javascript:_e(%7B%7D,'cvml','clojure%[email protected]');>.
>> 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 [email protected]
> <javascript:_e(%7B%7D,'cvml','[email protected]');>
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> [email protected]
> <javascript:_e(%7B%7D,'cvml','clojure%[email protected]');>
> 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 [email protected]
> <javascript:_e(%7B%7D,'cvml','clojure%[email protected]');>.
> 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 [email protected]
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to