我正在尝试对 compojure、ring 应用程序进行身份验证。/login
如果用户未通过身份验证,我想要做的是重定向到。下面的方法似乎正在做我想要的。
我在这里添加了wrap-restricted
处理程序#'home-routes
:
(def app-routes
(routes
(-> #'home-routes
(wrap-routes middleware/wrap-restricted)
(wrap-routes middleware/wrap-csrf)
(wrap-routes middleware/wrap-formats)
...))
然后在中间件中,我更改了处理程序on-error
中引用的wrap-restricted
,以执行重定向而不是 403 响应:
(defn on-error [request response]
;; (error-page
;; {:status 403
;; :title (str "Access to " (:uri request) " is not authorized")})
(redirect (format "/login?next=%s" (:uri request))))
(defn wrap-restricted [handler]
(restrict handler {:handler authenticated?
:on-error on-error}))
我的问题是,这是正确的(推荐的最佳实践)方法吗?