我正在用Luminus开发一个站点,直到现在我的中间件包装库函数看起来像这样:
(defn wrap-base [handler]
(-> ((:middleware defaults) handler)
wrap-auth
(wrap-access-rules {:rules rules :on-error on-error})
(wrap-authentication (session-backend))
wrap-flash
(wrap-defaults
(-> site-defaults
(assoc-in [:security :anti-forgery] false)
(assoc-in [:session :store] (ttl-memory-store (* 60 30)))))
wrap-internal-error))和我的routes/home.clj文件:
(defn home-routes []
[""
{:middleware [middleware/wrap-csrf
middleware/wrap-formats]}
(merge public-routes admin-routes)])但是现在我需要开发一个新的API ("/ API /getcustomers"),所以所有的身份验证/授权(和csrf)中间件必须只针对“home-route”,而不是针对新的API路由。API路由保存在一个新的routes/services.clj文件中。
幸运的是,卢米纳斯使用了reitit.ring,这是一种数据驱动的路由解决方案,但我不确定如何将身份验证/授权内容从一般的中间件中移出,而只将其分配给"home-routes“部分。
发布于 2020-01-19 05:50:14
我结束了在环中为新API创建规则:
;; File: src/some_app/middleware.clj
(defn open-gates [request]
true)
(def rules [{:pattern #"^/admin.*"
:handler admin-access
:redirect "/notauthorized"},
{:pattern #"^\/vclass.*"
:handler user-access
:redirect "/notauthorized"},
{:pattern #"^\/api.*"
:handler open-gates
:redirect "/notauthorized"},
{:pattern #"^/user.*"
:handler authenticated?}])https://stackoverflow.com/questions/59791940
复制相似问题