我的rails应用程序中有一个react组件,我尝试使用fetch()
向托管在localhost上的rails应用程序发送 POST,这给了我错误:
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
我使用devise gem来处理user/registrations
和logins
。
我已尝试删除protect_from_forgery with: :exception
下面是我的fetch代码,
this.state.ids.sub_id});
fetch(POST_PATH, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: body
}).then(res => res.json()).then(console.log);
我怎样才能得到csrf令牌并通过表单发送它以便它通过?
理想情况下,我希望只是通过头部发送它,但我不知道如何访问令牌。
4条答案
按热度按时间83qze16e1#
如果只是在Rails视图中嵌入一个react组件,最简单的方法是从Rails视图中检索csrf令牌,然后将其作为头文件传递到fetch API调用中。
您可以通过执行以下操作来获取csrf令牌:
然后在fetch调用中将其作为头文件传递:
... headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': csrf }, ...
我通常不使用fetch,所以不太清楚确切的语法,但这应该有助于指导您。
r1wp621o2#
谢谢!我最终得到了这个作为工作解决方案:在渲染react组件的视图中
我将令牌传入state,然后通过fetch访问它:
tuwxkamq3#
在
form
元素中,添加authenticity_token
:按如下设置值:
7d7tgy0s4#
我在使用rails 5.2时也遇到了同样的问题,我可以通过添加以下内容来解决这个问题
应用程序控制器.rb中的
protect_from_forgery with: :null_session
i got this from here,please refer this