8

https://github.com/clojure-liberator/liberatorと、それが開発者に提供する決定ポイントのリストをよく理解していません。ライブラリの/横/上を使用して、基本的な認証/認証サービスをどのように実装しますか?

4

2 に答える 2

14

慣用的な方法は、: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?))
于 2013-01-06T21:55:59.787 に答える
6

リードミーより」

リソースは Ring と互換性があり、Ring ミドルウェアでラップできます。評価されると、リソースは Ring リクエストを受け取って Ring レスポンスを返す関数を返します。

それをring-basic-authenticationでラップすることができます

(use 'ring.middleware.basic-authentication)
(defn authenticated? [name pass] (and (= name "foo") (= pass "bar")))
(def app (-> routes .. (wrap-basic-authentication authenticated?))
于 2012-12-04T18:08:31.690 に答える