Clojure 如何将戒指防伪/CSRF令牌与最新版本的戒指/compojure一起使用?

Clojure 如何将戒指防伪/CSRF令牌与最新版本的戒指/compojure一起使用?,clojure,ring,compojure,csrf-protection,Clojure,Ring,Compojure,Csrf Protection,我复制了一些在compojure 1.1.18和其他旧libs中工作的旧代码,但使用最新版本我无法使其工作 下面是我从中复制的内容,以演示使用最新的ring和compojure库,即使设置了头,在发送httpPOST时也会出现错误 lein-ring服务器启动,然后执行 curl-xget--cookiejarcookies”http://localhost:3000/“结果如下: {"csrf-token":"7JnNbzx8BNG/kAeH4bz1jDdGc7zPC4TddDyiyPGX3j

我复制了一些在compojure 1.1.18和其他旧libs中工作的旧代码,但使用最新版本我无法使其工作

下面是我从中复制的内容,以演示使用最新的ring和compojure库,即使设置了头,在发送http
POST
时也会出现错误

lein-ring服务器
启动,然后执行

curl-xget--cookiejarcookies”http://localhost:3000/“
结果如下:

{"csrf-token":"7JnNbzx8BNG/kAeH4bz1jDdGc7zPC4TddDyiyPGX3jmpVilhyXJ7AOjfJgeQllGthFeVS/rgG4GpkUaF"}
但当我这么做的时候

curl -X POST -v --cookie cookies -F "email=someone@gmail.com" --header "X-CSRF-Token: 7JnNbzx8BNG/kAeH4bz1jDdGc7zPC4TddDyiyPGX3jmpVilhyXJ7AOjfJgeQllGthFeVS/rgG4GpkUaF" http://localhost:3000/send
我得到了无效的防伪令牌

我做错什么了吗


我借用的代码。

问题是
环默认值
(它取代了compojure>=1.2中的
compojure.handler
命名空间)在通常的使用模式下自动使用环
防伪

(defroutes app-routes
  (GET "/" [] (generate-string {:csrf-token
                                *anti-forgery-token*}))
  (POST "/send" [email] "ok")
  (resources "/")
  (not-found "Not Found"))

(def app
  (-> app-routes
   (wrap-defaults site-defaults)))

因此生成了两个防伪令牌,
GET
请求提供了无效令牌。删除
包裹防伪
行修复了问题。

在黑暗中拍摄,但是使用反斜杠避开前斜杠(在代币中)会有什么不同吗?谢谢!James Reeves/weavejester是compojure的作者,他替换了不推荐使用的compojure
处理程序
名称空间,自动要求HTTP
POST
等使用CSRF令牌。因此,我的代码生成了两次令牌,并根据错误的令牌进行验证。我正在解决一个问题……如果你对结果满意,你可以将自己的问题标记为已回答。