2016-08-23 85 views
4

我正在开发一个Rails 5 api项目,移动客户端使用此项目进行授权,授权为gem devise_token_authRails 5 devise_token_auth无法验证CSRF令牌的真实性

我很清楚警告的含义。

1号问题:CSRF保护应该被关闭的API(JSON/XML)响应,是否正确?

我在网上搜索了一些似乎CSRF只发​​生在使用cookie的web应用程序上。

要记住,XML或JSON请求也受到影响是很重要的>,如果你正在构建的API,你应该改变默认防伪保护>方法的ApplicationController(:::例外,但我从rails api documen吨阅读本):

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

不起作用?

不知道我是否理解错误。谢谢!

回答

6

的代码应该是:

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

您可能需要使用null_session的API,它请求期间提供了一个空的会议,但并不能完全复位。如果未指定with选项,则用作默认值。

+0

谢谢托比!编辑。 – Nathan

相关问题