【问题标题】:How to save a user in noir session in a compojure web project?如何在 compojure Web 项目的 noir 会话中保存用户?
【发布时间】:2019-02-16 11:34:12
【问题描述】:

我必须在会话中保存用户名,但我似乎无法让它工作。这是我的代码(sesh 是黑色会话):

(defn set-loggedin [username password]
(do
(sesh/put! :username (:user username))
(sesh/put! :password (:pass password))))

(defn login-handler [username password]
(let [user (datab/login username password)]
(if (empty? user)
(view/login-form "Wrong username/password")
(do
(set-loggedin username password)
(response/redirect "/main")))))

(defroutes app-routes
(GET "/" [] (view/login-form "" ))
(POST "/" [username password] (login-handler username password))
(GET "/main" [] (view/main-page))
(route/resources "/")
(route/not-found "Not Found"))

(def app
(sesh/wrap-noir-session
(wrap-defaults  app-routes (assoc-in site-defaults [:security :anti-forgery] 
false))))

这是打嗝中的主页,当我登录时它不显示用户:

(defn main-page []
(html[:head [:title "main"]] [:body
                             (sesh/get :username)] ))

任何帮助将不胜感激!

【问题讨论】:

    标签: clojure compojure ring noir lib-noir


    【解决方案1】:

    在您的 set-loggedin 函数中,您尝试从“用户名”获取 :user 密钥,我怀疑它是一个字符串,并从“密码”获取 :pass 密钥,这可能是一个字符串。

    do 在函数定义中也是不必要的,所以试试这个:

    (defn set-loggedin [username password]
      (sesh/put! :username username)
      (sesh/put! :password password)))
    

    【讨论】:

    • 谢谢,我也更改了应用程序功能中的中间件,因为我收到了无效令牌错误:(def app (noir-middleware/app-handler [app-routes] :ring-defaults (assoc-in站点默认值 [:security :anti-forgery] false)) )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2012-03-07
    • 2015-05-20
    • 2013-11-02
    • 1970-01-01
    • 2013-05-21
    • 2011-04-21
    相关资源
    最近更新 更多