2012-12-04 19 views

risposta

6

dal readme"

risorse sono compatibili con l'anello e possono essere avvolti in anello middleware. Quando ha valutato, una risorsa restituisce una funzione che prende una richiesta Anello e restituisce una risposta anello.

modo da poter poi avvolgerlo in 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

il modo idiomatica è l'attuazione del :authorized? punto di decisione. Tuttavia non esiste attualmente alcun supporto per la gestione dell'autenticazione di base o digest. Un approccio pratico è quello di utilizzare ring-basic-authentication per l'autenticazione e gestire solo l'autorizzazione nella risorsa. L'esempio seguente utilizza l'autenticazione ring-basic e imposta il token sul ruolo di un utente. Questo ruolo viene poi controllato da liberatore in 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' dovrebbe essere' cond' in questo (molto buono) esempio, ma noi [non posso accedere a correggere errori di battitura] (https: //meta.stackexchange .com/questions/77233/is-we-scoraggiato-da-fixing-typos-and-misspellings-on-stack-exchange-sites) – Conan

+0

Il typo è fisso. Grazie per il suggerimento – ordnungswidrig

+0

Sono stato in grado di gestire l'autenticazione, ma non l'autorizzazione. Se passo "admin-only" a wrap-basic-authentication ottengo il seguente errore "clojure.lang.ArityException: numero errato di argomenti (2) passato a: controller/solo admin". La mia dichiarazione di percorso è la seguente: (Richiesta GET "/ test" (richiesta solo admin) .Come il token arriva alla risorsa? Grazie. –

Problemi correlati