Как реализовать аутентификацию пользователя с помощью clojure-liberator?
Я не совсем понимаю https://github.com/clojure-liberator/liberator и список решений, которые он предоставляет разработчику. Как реализовать базовую службу аутентификации / аутентификации, используя / рядом с / поверх библиотеки?
2 ответа
Из файла "
Ресурсы совместимы с Ring и могут быть обернуты в промежуточное ПО Ring. При оценке ресурс возвращает функцию, которая принимает запрос Ring и возвращает ответ Ring.
так что вы можете обернуть его в кольцевой аутентификации
(use 'ring.middleware.basic-authentication)
(defn authenticated? [name pass] (and (= name "foo") (= pass "bar")))
(def app (-> routes .. (wrap-basic-authentication authenticated?))
Идиоматический способ заключается в реализации :authorized?
точка принятия решения. Однако в настоящее время не поддерживается обработка базовой или дайджест-аутентификации. Практический подход заключается в использовании ring-basic-authentication
для аутентификации и обработки только авторизации в ресурсе. В следующем примере используется ring-basic-authentication и задается токен для роли пользователя. Эта роль затем проверяется освободителем в authorized?
(defresource admin-only
:handle-ok "secrect"
:handle-unauthorized "for admins only"
:authorized? (fn [{{token :token} :request}]
(= "admin" token)))
;; token returned encodes role
(defn authenticated? [name pass]
(cond (and (= name "scott")
(= pass "tiger")) "admin")
(and (= name "jack")
(= pass "jill")) "user)))
(def app (wrap-basic-authentication admin-only authenticated?))