(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
回归身体。你的代码是(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:如果你正在写一个网站.lib-noir是控制会话和其他的好方法。
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是正确的,但我的工作是删除标题。这是我的代码:
(:require
[ring.util.response :refer [redirect]])
(defn set-user! [id {session :session}]
(-> (redirect "/home")
(assoc :session (assoc session :user id))))