Я пытаюсь использовать Friend с Luminus (в основном lib-noir), и я обнаружил, что мой :credential-fn
не называется вообще. Сначала я подумал, что, возможно, я неправильно добавил промежуточное программное обеспечение, но я попытался настроить пользовательский :login-failure-handler
, чтобы узнать, по крайней мере, это сработало, и это произошло.: credential-fn не вызывается другом/аутентифицирует промежуточное программное обеспечение?
Вот как мое приложение выглядит следующим образом:
(defroutes my-routes
(GET "/login" [login_failed username]
(login-page login_failed username)) ;; login-page just renders HTML form
(GET "/logout" req
(friend/logout* (resp/redirect (str (:context req) "/")))))
(defn login-failure-handler [req]
(println "Failed") ;; <-- get's printed and redirects no problem
(redirect "/login?failed=Y"))
(defn credential-fn [creds-map]
(println creds-map) ;; <-- doesn't get printed at all
{:identity "test" :roles [::user]})
;; define custom wrapping middleware as noir's middleware/app-handler does
;; its own thing with routes + middleware
(defn authenticate [handler]
(friend/authenticate
handler
{:workflows [(workflows/interactive-form
:credential-fn credential-fn
:login-failure-handler login-failure-handler)]}))
(defn debugger [handler]
(fn [req]
(println req)
(handler req)))
(def app (middleware/app-handler
;; add your application routes here
[my-routes]
;; add custom middleware here
:middleware [debugger authenticate]
;; add access rules here
:access-rules []
;; serialize/deserialize the following data formats
;; available formats:
;; :json :json-kw :yaml :yaml-kw :edn :yaml-in-html
:formats [:json-kw :edn]))
Я также добавил debugger
промежуточное программное обеспечение, что просто печатает карту запроса, и я заметил, что он не печатает ничего на всех, когда Я нажимаю кнопку отправки формы входа в систему (т. Е. Запрос POST не выполняется). Он сразу же распечатывает GET до login-failure-handler
.
Что я пропустил?
Это кажется распространенным [ошибка] (http://stackoverflow.com/questions/21189236/friend-authentication-empty-param/21224840#21224840), если вы хотите просто использовать предоставленные рабочие процессы, но я боюсь, что не могу согласиться с вами , это не недостаток. Вы можете легко разветвить любой рабочий процесс и настроить имена параметров, см. Https://github.com/cemerick/friend/blob/master/src/cemerick/friend/workflows.clj#L77-78 –