为什么用户名没有保存在Clojure项目的noir会话中? [英] Why is username not saved in noir session in Clojure project?

查看:109
本文介绍了为什么用户名没有保存在Clojure项目的noir会话中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我在登录期间保存它的方式:

This is how I save it during login:

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

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

(defroutes app-routes
 ...
(POST "/" [username password] (login-handler username password))
(POST "/movie/save" [movieID name] (film-new movieID name))
 ...)

 (def app
 (noir-middleware/app-handler
 [app-routes]
 :ring-defaults (assoc-in site-defaults [:security :anti-forgery] false)))

当我在登录后在表单上显示用户名时,它会显示它,但是当我尝试保存电影(电影表具有列用户名)并获得用户名nil时.

When I show the username on the form after the login, it shows it, but when I try to save the movie (movie table has a column username) and get the username it is nil.

(defn film-new [movieID name]
(datab/filmnew movieID name (sesh/get :username))
(resp/redirect "/movies")
 )

我将会话包装错误吗?我不明白我也尝试过像这样包装它

Am i wrapping the session wrong? I don't get it. I have also tried to wrap it like this

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

推荐答案

libnoir现在已正式弃用.从此处开始.

这是一个最小的示例,用于显示libnoir的有状态会话可以直接使用:

This is a minimal example to show that libnoir's stateful session works out of the box:

(ns ln.core
  (:require
   [compojure.core :refer [defroutes GET]]
   [noir.session :as session]
   [noir.util.middleware :as middleware]
   [ring.adapter.jetty :refer [run-jetty]]))

(defroutes app-routes
  (GET "/foo" []
       (session/update-in! [:foo] not)
       "Now go to /bar")
  (GET "/bar" []
       "foo was" (str (session/get :foo))))

(def app
  (middleware/app-handler
   [app-routes]))

(defonce server (atom nil))

(defn stop-server []
  (when-let [s @server]
    (.stop s)))

(defn dev []
  (stop-server)
  (reset! server (run-jetty app {:port 8888
                                 :join? false})))

;;;; Scratch

(comment
  (dev)
  )

如果您可以提供最少的复制品来表明您的代码未按预期工作,我们将为您提供进一步的帮助.话虽如此,libnoir对我来说似乎有点被遗弃.您最好从香草开始.

If you could provide a minimal reproduction to show that your code is NOT working as expected, we could help you further. Having said that, libnoir looks a bit abandoned to me. You might be better of starting with vanilla Ring.

这篇关于为什么用户名没有保存在Clojure项目的noir会话中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆