ruby-on-rails - 无法验证 CSRF 令牌的真实性 Rails/React
问题描述
我在我的 Rails 应用程序中有一个反应组件,我试图用它向托管在 localhost 上的 Rails 应用程序fetch()
发送POST,这给了我错误:
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
我正在使用设计 gem 来处理user/registrations
和logins
.
我试图删除protect_from_forgery with: :exception
这是我获取的代码,
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 令牌并通过表单发送它以使其通过?
理想情况下,我只想通过标头发送它,但我不知道如何访问令牌。
解决方案
如果您只是在 Rails 视图中嵌入一个 React 组件,那么最简单的方法是从 Rails 视图中检索 csrf 令牌,然后将其作为标头传递给您的 fetch api 调用。
您可以通过执行以下操作获取 csrf 令牌:
const csrf = document.querySelector("meta[name='csrf-token']").getAttribute("content");
然后你只需在 fetch 调用中将它作为标题传递:
...
headers: {
'Content-Type': 'application/json',
'X-CSRF-Token': csrf
},
...
我通常不使用 fetch,因此不太确定确切的语法,但这应该有助于指导您。
推荐阅读
- html - CSS Working for one Page but not Another
- spring-mvc - How to get actual request URL in routed service when using Zuul service and Spring boot?
- java - Controlling a device hardware via device admin or root
- reactjs - React Link 没有正确重定向
- c# - How to create deep-clone of DYNAMIC List?
- git - Can I restore my source files with only the .git folder?
- css - 3行标题时网站网格布局混乱
- swift - 页面控件中的多个 UILabel
- android - MediaPlayer 不开始视频回放
- mongodb - MongoDB拆分聚合结果