Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure friend使用基本身份验证导致重定向循环_Clojure_Ring - Fatal编程技术网

Clojure friend使用基本身份验证导致重定向循环

Clojure friend使用基本身份验证导致重定向循环,clojure,ring,Clojure,Ring,我使用ring和compojure和friend在玩具应用程序中实现基本密码验证。现在我正在尝试实现一个示例,我的环服务器在每个浏览器中都会导致重定向循环 这是我的代码: (ns kassenclo.handlers (:use [ring.util.response] [ring.middleware.resource] [ring.middleware.params]) (:require [compojure.core :refer :all]

我使用
ring
compojure
friend
在玩具应用程序中实现基本密码验证。现在我正在尝试实现一个示例,我的环服务器在每个浏览器中都会导致重定向循环

这是我的代码:

(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工作流
auth凭证
之间交替运行了几次。有人能告诉我我遗漏了什么吗

//编辑:
奇怪的是,这种重定向循环在每条路由上都会发生,甚至在
/
上,在
defroutes
命令中没有使用
friend

我发现
make auth
功能,在返回身份验证凭据之前,必须对身份验证凭据的返回值应用正确形式的身份验证映射。如果它发生在之后,就像我原来的帖子一样,我的朋友拒绝了它,我们得到了一个身份验证循环