redirect - Ring.util.response/redirect 不重定向站点

标签 redirect clojure http-redirect compojure ring

我有一个母版页,用于显示导航栏、版权信息以及处理登录。它获取用户配置文件,并将其传递给内容函数,如果用户未登录,则传递给 nil。因此,对于我想要要求登录的页面,我将在顶部进行检查,然后如果用户未登录则重定向。命名空间声明包括

(ns kandj.views.content
  (:require [ring.util.response :as response]))

对于内容函数,我有以下代码:

(defn profile [g-profile]
  (if (nil? g-profile)
    (do (response/redirect "/" 307)
        (println "redirecting"))))

它将redirecting打印到控制台,但实际上并不重定向。我尝试过使用字符串作为重定向代码 "307",并排除它以使用默认值 302。我尝试过的任何操作都不会导致页面重定向。我做错了什么?

最佳答案

您需要将 response/redirect 作为最后一个表达式,否则您的处理程序将返回 nil,这是 println 表达式的结果。

但是,我认为您应该系统地处理此类横切问题,而不是向每个页面添加安全相关逻辑。惯用的方法是使用ring的中间件。

您可以编写自己的中间件处理程序,它会知道所请求的 URL 是否需要用户进行身份验证,并传递到页面呈现或重定向到登录页面。

例如:

(defn authenticated? [request]
  ... your logic to check if the user is authenticated or not...)

(defn secured-url? [request]
  ... your logic for determining if the requested page requires authenticated user...)

(defn wrap-user-auth-check [handler]
  (fn [request]
    (if (and (secured-url? request)
             (authenticated? request))
      (handler request)
      (response/redirect "/"))))

(def app
  (-> handler
    (wrap-user-auth-check)))

您还可以查看一个用于处理环的 Web 应用程序安全性的库:friend .

关于redirect - Ring.util.response/redirect 不重定向站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36238976/

相关文章:

wordpress - 在 woocommerce 结帐时永久移动 301 错误

ASP.NET MVC 5 Identity 2 基于用户角色的登录重定向

javascript - ClojureScript 中的向量到元素?

javascript - jQuery AJAX 后的重定向问题

ios - Alamofire:遵循 HTTP 重定向(或不遵循)

java - 使用 Java 创建 'HTTP Redirect Binding' SAML 请求

asp.net - IIS 默认重定向

c++ - 如何将 QWebEngineUrlRequestInfo 重定向到本地文件?

loops - "dotimes"和 "for"功能之间交叉吗?

haskell - Clojure、Haskell(和其他语言)在 STM 中使用了哪些算法?