首页 文章

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

提问于
浏览
5

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

我清楚警告意味着什么 .

1st Question: CSRF protect should be turned OFF for api(JSON/XML)respond ,对吗?

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

重要的是要记住XML或JSON请求也会受到影响>如果您正在构建API,则应该在ApplicationController中更改伪造保护>方法(默认情况下::: exception):class ApplicationController <ActionController :: Base protect_from_forgery除非: - > {request.format.json? } 结束

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

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

2nd Question: 如果API不需要CSRF保护,为什么呢

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

不起作用?

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

1 回答

  • 6

    代码应该是:

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

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

相关问题