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 回答