登录后响铃重定向

ring redirect after login

(ns ...
  (:require  [ring.util.response :refer [ response redirect]))

我的原始代码完全一样

(-> (response "You are now logged in! communist party time!")
    (assoc :session new-session)
    (assoc :headers {"Content-Type" "text/html"}))

效果很好,但用户仍然需要手动导航到其他地方。

正在尝试使用 http://ring-clojure.github.io/ring/ring.util.response.html#var-redirect

(-> (redirect requri)
    (assoc :session new-session)
    (assoc :headers {"Content-Type" "text/html"}))

不执行任何操作(除了返回空白页)。

如何使用环实现到已知 uri 的重定向?

response 是 return 一具尸体。 你的代码是 (response requri),但是函数 reponse 的参数是 html 主体,而不是 uri,你可以使用 this function

像这样

(ns foo
   (:require [ring.util.response :as response]))
(def requi "/")
(-> (response/redirect requri)
    (assoc :session new-session)
    (assoc :headers {"Content-Type" "text/html"}))

ps:如果你正在写网页site.the lib-noir是控制session等的好方法。

ipaomian 有答案。

想要分享一个不错的重定向技巧:

(ns foo
   (:require [ring.util.response :as response]))

(defn redirect
  "Like ring.util.response/redirect but also accepts key value pairs
   to assoc to response."
  [url & kvs]
  (let [resp (response/redirect url)] 
    (if kvs (apply assoc resp kvs) resp)))

(redirect "/" :session new-session :headers {"Content-Type" "text/html"})

ipaomian 是正确的,但我的工作是通过删除 headers。这是我的代码:

(:require
    [ring.util.response :refer [redirect]])

(defn set-user! [id {session :session}]
  (-> (redirect "/home")
      (assoc :session (assoc session :user id))))