加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails 5 devise_token_auth无法验证CSRF令牌的

发布时间:2020-12-17 03:25:03 所属栏目:百科 来源:网络整理
导读:我正在开发一个Rails 5 api项目,移动客户端使用gem devise_token_auth进行授权. 我清楚警告意味着什么. 第一个问题:对于api(JSON / XML)响应,CSRF保护应该关闭,对吗? 我在网上搜索了一些似乎CSRF恰好发生在带有cookie的web应用程序上.但我从rails api docu
我正在开发一个Rails 5 api项目,移动客户端使用gem devise_token_auth进行授权.

我清楚警告意味着什么.

第一个问题:对于api(JSON / XML)响应,CSRF保护应该关闭,对吗?

我在网上搜索了一些似乎CSRF恰好发生在带有cookie的web应用程序上.但我从rails api document读到这个:

It’s important to remember that XML or JSON requests are also affected >and if you’re building an API you should change forgery protection >method in ApplicationController (by default: :exception):

class ApplicationController < ActionController::Base
protect_from_forgery unless: -> { request.format.json? }
end

所以我仍然通过这样添加警告:

class ApplicationController < ActionController::Base
  protect_from_forgery unless: -> { request.format.json? }
  include DeviseTokenAuth::Concerns::SetUserByToken
end

第二个问题:如果API不需要CSRF保护,为什么呢

protect_from_forgery unless: -> { request.format.json? }

不起作用?

不确定我是否理解错误.谢谢!

解决方法

代码应该是:

protect_from_forgery with: :null_session,if: ->{request.format.json?}

您可能必须对API使用null_session,它在请求期间提供空会话但不会完全重置它.在以下情况下用作默认值:未指定选项.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读