我想在我的SailsJS和Angular 2应用程序中启用CSRF,但我遇到了无数问题。
Angular应用程序位于只有在用户登录后才能访问的页面,由Sails策略控制。
然后我http.get
来自/csrfToken
路由的CSRF令牌并存储它,并在执行POST时将其添加到HTTP头。
我一直在收到CSRF不匹配错误,而我终于意识到/csrfToken
路由每次都返回一个不同的值,来自http.get
以及访问时来自浏览器的网址。
当我通过this tutorial(参见00:30)进行多页应用程序时,不清楚是否发生这种情况,其中CSRF值作为表单中的隐藏字段提交,并且没有似乎没有提到如何在Sails文档中改变这种行为。
如何配置Sails以便为会话维护单个CSRF值?
更新:现在正在运作
我已根据建议将更新作为答案。
答案 0 :(得分:1)
事实证明,有不同的问题导致了我的问题。
我的代码已经变得如此碎片化以至于我没有意识到我正在引用一个将CSRF放入标题错误的旧函数。
我回滚了一堆客户端代码,然后神奇地说,CSRF值在Ajax调用之间保持一致,并且在POST请求中也能正常工作。
所以我猜我的碎片代码中有一些东西导致CSRF令牌在API调用之间发生变化,但我不知道它是什么。
在浏览器中访问/csrfToken
每次都会产生不同的结果,但它似乎不会影响API调用。
修改的
我发现CSRF随着/csrfToken
的每个请求而变化。我的一个错误是在我第一次存储CSRF值之后(偶然)稍后再次请求新的/csrfToken
,然后使存储的值无效。然后,使用存储的值会在发出新值时导致CSRF不匹配错误。