2012-12-04 15 views

答えて

6

リソースリングと互換性があると評価した場合、リソースは、リング要求を受け取り、リング応答を返す関数を返す。リング・ミドルウェアで包むことができる。

ので、あなたはその後、慣用的な方法は、を実装することですring-basic-authentication

(use 'ring.middleware.basic-authentication) 
(defn authenticated? [name pass] (and (= name "foo") (= pass "bar"))) 
(def app (-> routes .. (wrap-basic-authentication authenticated?)) 
14

でそれをラップすることができます決定ポイント。しかし、現在のところ、基本認証またはダイジェスト認証の処理はサポートされていません。実用的なアプローチは、認証にring-basic-authenticationを使用し、リソース内の認可のみを処理することです。次の例では、リングベーシック認証を使用し、トークンをユーザのロールに設定します。この役割は、この(非常に良い)の例ではcond` `でなければなりません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?)) 
+0

' cone'に解放者によって確認されたが、我々は(HTTPS [タイプミスを修正することはできません]://meta.stackexchangeを.com/questions/77233/are-we-spellged-from-fixed-typos-and-misspellings-on-stack-exchange-sites) – Conan

+0

Typoが修正されました。ヒントをありがとう – ordnungswidrig

+0

私は認証を管理することができましたが、承認は管理できませんでした。 wrap-basic-authenticationに "admin-only"を渡すと、次のエラーが表示されます: "clojure.lang.ArityException:間違った数のargs(2)が渡されました:controller/admin-only"。トークンのリソースへの到達感謝 –

関連する問題