I will re-phrase the question. Can anyone suggest a reason why the form 
params would be not register with these middlewares in place? 

(def app
  (-> app-routes
      (friend/authenticate {:workflows [(workflows/interactive-form)]
                            :credential-fn (partial 
creds/bcrypt-credential-fn users)})
      (wrap-session {:cookie-name "timeout-session" :cookie-attrs {:max-age 
90}})
      (wrap-cookies)
      (wrap-multipart-params)
      (wrap-params)
      (wrap-nested-params)
      (wrap-keyword-params)))

The problem is specific to "friend". I have other forms, which are not 
protected by "friend" and they work just fine. 

But with "friend", when I pprint the request to the terminal, I only see 
stuff like:

:params {},
 :form-params {},
 :multipart-params {},

I print the request on the first line of the login function: 

(defn login [request]
  (println (pp/pprint request))
  "2013-03-01 - the default name of the function expected by the Friend 
authorization library."
  (timbre/spy :debug " the return value of the login page: "
              (let [login-template (enlive/html-resource 
"templates/login.html")
                    login-html  (apply str (enlive/emit* login-template))
                    layout (enlive/html-resource "templates/admin.html")
                    layout (enlive/transform layout
                                             [:#outer]
                                             (enlive/html-content 
login-html))
                    html (apply str (enlive/emit* layout))
                                                              ]
                (response html))))


my routes:

(defroutes app-routes
  (ANY "/" request (home-page request))
  (ANY "/login" request (login request))
  (friend/logout (ANY "/logout" request (ring.util.response/redirect "/")))
  (GET "/serve-file/:file-id" request (serve-file request))
  (GET "/home/:slides-id" request (home-page request))
  (GET "/action/:action-to-perform" request (action request))
  (GET "/admin" request (friend/authorize #{::admin} (admin request)))
  (GET "/admin/list/:item-type" [item-type] (admin-list item-type))
  (GET "/admin/edit/:item-type" request (admin-forms request))
  (GET "/admin/edit/:item-type/:item-name" request (admin-forms request))
  (POST "/admin/edit/:item-type/:item-name" request 
(admin-process-form-input request))
  (POST "/admin/edit/:item-type" request (admin-process-form-input request))
  (GET "/admin/delete/:item-type/:item-name" request 
(admin-delete-ask-for-confirmation request))
  (POST "/admin/delete/:item-type/:item-name" request 
(admin-delete-finalized request))
  (GET "/admin/clone/:item-type/:item-name" request (admin-clone-this-item 
request))
  (GET "/admin/preview/:item-type/:item-name" request (admin-preview 
request))
  (GET "/admin/upload" request (admin-upload request))
  (route/resources "/")
  (route/not-found "Page not found"))


I have tried several things and nothing has given me much of a clue, so any 
suggestions are welcome. 





On Friday, April 26, 2013 2:16:22 PM UTC-4, larry google groups wrote:
>
> I have tried putting (friend/authenticate) at the beginning and end of 
> this block:
>
>
> (def app
>   (-> app-routes
>       (wrap-session {:cookie-name "timeout-session" :cookie-attrs 
> {:max-age 90}})
>       (wrap-cookies)
>       (wrap-multipart-params)
>       (wrap-params)
>       (wrap-nested-params)
>       (wrap-keyword-params)
>       (friend/authenticate {:workflows [(workflows/interactive-form)]
>                             :credential-fn (partial 
> creds/bcrypt-credential-fn users)
>                             :login-uri "/login"
>                             :unauthorized-redirect-uri "/login" 
>                             :default-landing-uri "/admin"})))
>
>
> and: 
>
>
> (def app
>   (-> app-routes
>       (friend/authenticate {:workflows [(workflows/interactive-form)]
>                             :credential-fn (partial 
> creds/bcrypt-credential-fn users)
>                             :login-uri "/login"
>                             :unauthorized-redirect-uri "/login" 
>                             :default-landing-uri "/admin"})
>       (wrap-session {:cookie-name "timeout-session" :cookie-attrs 
> {:max-age 90}})
>       (wrap-cookies)
>       (wrap-multipart-params)
>       (wrap-params)
>       (wrap-nested-params)
>       (wrap-keyword-params)
> ))
>
>
> but that doesn't seem to matter. 
>
> I defined my one user in the namespace as: 
>
> (def users {"admin" {:username "admin"
>                      :password (creds/hash-bcrypt "47010thave")
>                      :roles #{::admin}}})
>
> If I point my broswer here:
>
> localhost:30000/admin
>
> I get redirected to here:
>
> localhost:30000/admin
>
> I then fill in this form:
>
> <form action="/login" method="POST">Username: <input type="text" name="
> username" /><br />Password: <input type="password" name="password" /><br 
> />
> <input type="submit" name="submit" value="submit" /><br /></form>
> If I print the request to the terminal, the form params are all blank:
>
> {:ssl-client-cert nil,
>  :remote-addr "0:0:0:0:0:0:0:1",
>  :scheme :http,
>  :query-params {"username" "", "login_failed" "Y", "" nil},
>  :session {},
>  :cemerick.friend/auth-config
>  {:unauthorized-redirect-uri "/login",
>   :allow-anon? true,
>   :default-landing-uri "/admin",
>   :login-uri "/login",
>   :credential-fn
>   #<core$partial$fn__4070 clojure.core$partial$fn__4070@1627fd1>,
>   :workflows
>   [#<workflows$interactive_form$fn__4503 
> cemerick.friend.workflows$interactive_form$fn__4503@28ee2be9>],
>   :unauthenticated-handler
>   #<Var@557db906:
>     #<friend$default_unauthenticated_handler 
> cemerick.friend$default_unauthenticated_handler@114e8c69>>,
>   :unauthorized-handler
>   #<Var@3d93cfcb:
>     #<friend$default_unauthorized_handler 
> cemerick.friend$default_unauthorized_handler@1aaad63a>>},
>  :form-params {},
>  :multipart-params {},
>  :request-method :get,
>  :query-string "&login_failed=Y&username=",
>  :route-params {},
>  :content-type nil,
>  :cookies {"timeout-kiosk" {:value "timeout-kiosk3312112"}},
>  :uri "/login",
>  :server-name "localhost",
>  :params {"" nil, "login_failed" "Y", "username" ""},
>  :headers
>  {"user-agent"
>   "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.31 
> (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537\
> .31",
>   "cookie" "timeout-kiosk=timeout-kiosk3312112",
>   "accept-charset" "ISO-8859-1,utf-8;q=0.7,*;q=0.3",
>   "accept"
>   "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
>   "host" "localhost:30001",
>   "referer" "http://localhost:30001/login?&login_failed=Y&username=";,
>   "cache-control" "max-age=0",
>   "accept-encoding" "gzip,deflate,sdch",
>   "accept-language" "en-US,en;q=0.8",
>   "connection" "keep-alive"},
>  :content-length nil,
>  :server-port 30001,
>  :character-encoding nil,
>  :body #<HttpInput org.eclipse.jetty.server.HttpInput@25796d08>}
>
>
>
> I have defined the routes like this:
>
>
> (defroutes app-routes
>   (ANY "/" request (home-page request))
>   (GET "/login" request (login request))
>   (friend/logout (ANY "/logout" request (ring.util.response/redirect "/")))
>   (GET "/serve-file/:file-id" request (serve-file request))
>   (GET "/home/:slides-id" request (home-page request))
>   (GET "/action/:action-to-perform" request (action request))
>   (GET "/admin" request
>        (friend/authorize #{::admin}  (admin request)))
>   (GET "/admin/list/:item-type" [item-type] (admin-list item-type))
>   (GET "/admin/edit/:item-type" request (admin-forms request))
>   (GET "/admin/edit/:item-type/:item-name" request (admin-forms request))
>   (POST "/admin/edit/:item-type/:item-name" request 
> (admin-process-form-input request))
>   (POST "/admin/edit/:item-type" request (admin-process-form-input 
> request))
>   (GET "/admin/delete/:item-type/:item-name" request 
> (admin-delete-ask-for-confirmation request))
>   (POST "/admin/delete/:item-type/:item-name" request 
> (admin-delete-finalized request))
>   (GET "/admin/clone/:item-type/:item-name" request (admin-clone-this-item 
> request))
>   (GET "/admin/preview/:item-type/:item-name" request (admin-preview 
> request))
>   (GET "/admin/upload" request (admin-upload request))
>   (route/resources "/")
>   (route/not-found "Page not found"))
>
>
> And the login function looks like this:
>
> (defn login [request]
>   (println (pp/pprint request))
>   "2013-03-01 - the default name of the function expected by the Friend 
> authorization library."
>   (timbre/spy :debug " the return value of the login page: "
>               (let [login-template (enlive/html-resource 
> "templates/login.html")
>                     login-html  (apply str (enlive/emit* login-template))
>                     layout (enlive/html-resource "templates/admin.html")
>                     layout (enlive/transform layout
>                                              [:#outer]
>                                              (enlive/html-content 
> login-html))
>                     html (apply str (enlive/emit* layout))
>                                                               ]
>                 (response html))))
>
>
>
> Any thoughts about why the form inputs are empty? 
>
>

-- 
-- 
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/groups/opt_out.


Reply via email to