【发布时间】:2015-11-05 19:35:40
【问题描述】:
目前正在为使用 Ring 的 POST 请求设置 CSRF 令牌。我一直在关注这个问题的答案作为指导Set Ring-Anti-Forgery CSRF header token。 遵循本指南后,我能够成功获取 csrf 令牌并使用 curl 发送 POST 请求。但是,我只能以不使用 (wrap-reload) 和我的应用处理程序为代价来做到这一点。
本指南将此代码用于应用处理程序
(def app
(-> routes
(wrap-defaults site-defaults)
(wrap-session)))
但是,为了使用动态重新加载,我需要在开发过程中使用 (wrap-reload) 函数。像这样,
(def app
(-> routes
(wrap-defaults site-defaults)
(wrap-session)
(wrap-exception)
(wrap-reload)))
我很确定这与 cmets 在回答我上面链接的问题时解决的问题有关。设置中间件默认值时存在创建冗余行为的错误。
无论如何我可以使用 wrap-reload 并仍然获得有效的 CSRF 令牌吗?
【问题讨论】:
-
您的后端运行在 JVM 上,该代码正在设置您的环服务器,您可以使用 lein run 启动它。 Figwheel 设置 clojurescript 的自动编译。您的应用程序应该提供 html,然后调用 figwheel 的输出,它们是独立的进程,不应该发生冲突。我建议您发布一个指向最小工作示例的链接,否则您的问题真的很模糊。
-
好的,我理解你关于无花果轮和环重装是独立过程的观点。我想我应该问我如何使用 ring 的 reload 功能并获得正确的 CSRF 令牌。获取 CSRF 令牌的最小工作示例在我发布的链接中。但它没有环重新加载。
-
wrap-reload不会对 POST 请求做任何事情,请参阅 github.com/ring-clojure/ring/blob/1.4.0/ring-devel/src/ring/… 你能把例子放到 github 上并给出链接吗? -
编辑了我的问题,以更多地关注环的重新加载和 CSRF 令牌,而不是无花果或 POST 请求。但是,这个错误确实阻止了我使用带有环的 POST 请求,因为它需要 CSRF 令牌。此时我正在考虑手动设置开发令牌。
-
我可以确认您应该能够毫无问题地执行此操作。我将它与 figwheel 一起使用,并使用标头中的 CSRF 令牌对服务器进行 jason 调用,并毫无问题地使用重新加载中间件。我不相信 figwheel 与它有任何关系,除非您以某种方式将 CSRF 令牌存储在客户端的 def 中,在这种情况下,您需要用 defonce 替换 def 以便在 figwheel 重新加载时不会丢失您的客户端clojurescript。没有足够的细节来更具体。
标签: clojure csrf clojurescript ring