2017-03-12 5 views
0

ringcompojurefriend을 사용하여 장난감 앱에서 기본 비밀번호 인증을 실현합니다. 이제 예제를 구현하려고했는데 링 서버가 모든 브라우저에서 리디렉션 루프를 발생시킵니다.Clojure 친구가 기본 인증을 사용하여 리디렉션 루프를 발생시킵니다.

(ns kassenclo.handlers 
    (:use [ring.util.response] 
     [ring.middleware.resource] 
     [ring.middleware.params]) 
    (:require [compojure.core :refer :all] 
      [compojure.route :as route] 
      [ring.middleware.session :refer [wrap-session]] 
      [ring.middleware.keyword-params :refer [wrap-keyword-params]] 
      [kassenclo.views :as views] 
      [cemerick.friend :as friend] 
      [cemerick.friend.workflows :refer [make-auth]])) 

(defroutes app 
    (GET "/" [] views/tally-view) 
    (GET "/inventory" [] (friend/authorize #{::user} views/inventory-view)) 
    (route/not-found (html [:h1 "This page could not be found, please go back."]))) 

(defn auth-workflow [request] 
    (let [speak (get-in request [:params :speak]) 
     credential-fn (get-in request [::friend/auth-config :credential-fn])] 
    (make-auth (credential-fn speak)))) 

(defn auth-credential [password] 
    (if (= password "pass") 
    {:identity password :roles #{::user}})) 

(def handler 
    (-> app 
     (friend/authenticate {:workflows [auth-workflow] 
          :credential-fn auth-credential}) 
     (wrap-keyword-params) 
     (wrap-params) 
     (wrap-session) 
     (wrap-resource "public"))) 

간단한 디버깅이 중지되기 전에 서버가 몇 번 auth-workflow 사이 auth-credential을 번갈아 것을 나에게 보여줍니다

내 코드입니다. 아무도 내가 놓친 것을 나에게 지적 해 줄 수 있니? // 편집

: 호기심 것은이 리디렉션 루프도 frienddefroutes 명령에 사용되지 /에 모든 경로에서 발생한다는 것입니다.

답변

0

I은 ​​올바른 형태를 가지도록 인증 맵을 감싸는 make-auth 함수 그것을 반환 전에 인증 자격증-의 리턴 값에 적용한다는 것을 알았다. 나중에 원래 게시물 친구처럼 그것을 발생하면 그것을 거부하고 우리는 인증 루프를 얻을.