我正在研究一个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 回答
代码应该是:
您可能必须使用
null_session
for API,它在请求期间提供空会话,但不会完全重置它 . 在以下情况下用作默认值:未指定选项 .