Rails 5 devise_token_auth无法验证CSRF令牌的真实性

时间:2016-08-23 06:11:16

标签: ruby-on-rails csrf-protection

我正在开发一个Rails 5 api项目,该项目由移动客户端使用gem devise_token_auth进行授权。

我清楚警告意味着什么。

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

我在网上搜索了一些似乎CSRF恰好发生在带有cookie的web应用程序上。但是我从rails api documen t:

中读到了这个
  

记住XML或JSON请求也受到影响非常重要&gt;如果您正在构建API,则应更改ApplicationController中的伪造保护&gt;方法(默认情况下::exception):< / p>      

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? }

不起作用?

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

1 个答案:

答案 0 :(得分:6)

代码应为:

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

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