Clojure 如何将戒指防伪/CSRF令牌与最新版本的戒指/compojure一起使用?
我复制了一些在compojure 1.1.18和其他旧libs中工作的旧代码,但使用最新版本我无法使其工作 下面是我从中复制的内容,以演示使用最新的ring和compojure库,即使设置了头,在发送httpClojure 如何将戒指防伪/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
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处理程序
名称空间,自动要求HTTPPOST
等使用CSRF令牌。因此,我的代码生成了两次令牌,并根据错误的令牌进行验证。我正在解决一个问题……如果你对结果满意,你可以将自己的问题标记为已回答。