【问题标题】:Rails 5 devise_token_auth Can't verify CSRF token authenticityRails 5 devise_token_auth 无法验证 CSRF 令牌的真实性
【发布时间】:2016-12-29 20:01:57
【问题描述】:

我正在开发一个 Rails 5 api 项目,该项目由带有 gem devise_token_auth 的移动客户端用于授权。

我很清楚警告的含义。

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

我在网上搜索了一些,似乎 CSRF 只是发生在带有 cookie 的网络应用程序上。但我是从rails api document 读到的:

请务必记住,XML 或 JSON 请求也会受到影响 >如果您正在构建 API,您应该更改 ApplicationController 中的伪造保护方法(默认情况下::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? }

没有用?

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

【问题讨论】:

    标签: ruby-on-rails csrf-protection


    【解决方案1】:

    代码应该是:

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

    您可能必须为 API 使用 null_session,它在请求期间提供了一个空会话,但不会完全重置它。如果未指定 :with 选项,则用作默认值。

    【讨论】:

    • 谢谢托比!已编辑。
    猜你喜欢
    • 2017-07-15
    • 2015-07-24
    • 2014-06-16
    • 2012-05-08
    • 2015-12-29
    • 2023-03-26
    • 2016-09-17
    • 2012-12-11
    • 2019-07-15
    相关资源
    最近更新 更多