登录后重定向

问题描述 投票:5回答:3
(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?

redirect clojure ring
3个回答
6
投票

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是控制会话和其他的好方法。


1
投票

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"})

0
投票

ipaomian是正确的,但我的工作是删除标题。这是我的代码:

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

(defn set-user! [id {session :session}]
  (-> (redirect "/home")
      (assoc :session (assoc session :user id))))
© www.soinside.com 2019 - 2024. All rights reserved.