将CSRF令牌存储在redux中是一种好的做法吗?我之前用道具传递过它(将它添加到Axios头文件中)。我有一个rails后端,我使用的是gem react-rails
,我的组件是服务器渲染的,所以我没有想出任何其他的方法来做到这一点,而是将CSRF令牌传递给组件。
发布于 2021-06-02 17:53:54
将令牌存储在Redux存储中是很好的。
令牌的目的是防止其他站点/源向您的API发出非GET (POST,PUT,DELETE)请求。如果没有它,恶意站点可能会发出请求,并利用存储在您的浏览器中的cookie和会话。在纯HTML服务器呈现的Rails应用程序中,该令牌直接放入HTML中,使其可用于该页面上的任何JavaScript。因此,对于您控制的页面上的任何代码,它都不是私有信息。
尽管如此,考虑到它是全球性的,并且您可能需要在Redux的上下文之外使用它,最好将它放在window
上供任何人使用:
window.CSRF_TOKEN = document.querySelector("meta[name='csrf-token']").getAttribute("content")
任何时候调用fetch
时,都可以包含以下标头:
headers: {
'X-CSRF-Token': window.CSRF_TOKEN
}
由于您使用的是react-rails
,因此也可以将其作为道具传递给您的组件:
react_component 'MyForm', authenticity_token: form_authenticity_token
如果您不依赖Rails会话进行身份验证(例如,使用持有者令牌),则还可以在ApplicationController
中使用以下行完全禁用CSRF令牌
protect_from_forgery with: :null_session
https://stackoverflow.com/questions/67802407
复制