2016-08-23 138 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

相關問題