2015-11-05 45 views
0

当前使用Ring设置POST请求的CSRF令牌。我一直在回答这个问题作为指导Set Ring-Anti-Forgery CSRF header token。 遵循本指南后,我能够成功获取csrf标记并发送带curl的POST请求。但是,我只能以不使用(wrap-reload)和我的应用处理程序为代价来做到这一点。使用Ring重载时无法设置CSRF令牌

该指南使用此代码为应用处理器

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

然而,为了使用动态重装我在开发过程中所需要的(总结重装)功能。像这样,

(def app 
    (-> routes 
     (wrap-defaults site-defaults) 
     (wrap-session) 
     (wrap-exception) 
     (wrap-reload))) 

我敢肯定,这是关系到通过评论在回答解决了问题,我上面链接的问题。在设置中间件默认设置时会产生一个错误,导致冗余行为。

反正我有可以使用包裹重载,仍然可以得到有效的CSRF令牌?

+0

你的后台运行在JVM上,该代码是建立你的戒指服务器,可以使用雷音运行启动它。 Figwheel设置clojurescript的自动编译。你的应用程序应该提供html,然后调用figwheel的输出,它们是独立的过程,不应该发生冲突。我建议你发布一个链接到一个最小的工作例子,否则你的问题是非常模糊的。 –

+0

好的,我明白你的观点,它是如何将轮轮和环加载分开的过程。我想我应该问如何使用ring的重载功能并获得正确的CSRF令牌。获取CSRF令牌的最小工作示例位于我发布的链接中。但它没有环重装。 –

+0

'wrap-reload'不会对POST请求做任何事情,请参阅https://github.com/ring-clojure/ring/blob/1.4.0/ring-devel/src/ring/middleware/reload.clj# L7你可以把例子给github并给出链接? – edbond

回答

1

没有足够的信息来提供的,你的问题可能是具体的细节。但是,一些常规提示可能会有用。

有关于github在figwheel站点上运行重新加载代码有用的描述。虽然这个描述是关于编写可重载的clojurescript的,但委托人同样适用于服务器端。

这是可能的原因自动重载可能是造成问题的防伪标记是会话被存储在一个“高清”,而不是一个defonce。这意味着当存储会话的文件被重新加载时,会话数据将丢失,这可能意味着您的csrf令牌也会丢失/被替换为新值。

这也可能是值得看Luminus公司模板。它也使用ring-defaults,它很好地处理了csrf标记的东西。实际上,它使用已扩展的selmar模板以包含csrf标记,这使得修改和设置js var来保存标记变得微不足道,因此使用带有ajax标记请求的标记非常容易。它也适用于自动重新加载。

+0

Luminus模板有帮助 –