2016-08-23 10 views
4

モバイルクライアントがgem devise_token_authを使用して承認するRails 5 apiプロジェクトに取り組んでいます。Rails 5 devise_token_auth CSRFトークンの真正性を確認できません

警告の意味についてはっきりしています。

第一問:CSRF保護は(JSON/XML)APIのためにオフにする必要があり、正しいを、対応?

私はWeb上でいくつか検索しましたが、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

コードは次のようになります。あなたはAPIのためnull_sessionを使用する必要があります

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

、それは要求時に空のセッションを提供していますが、それを完全にリセットされません。オプションが指定されていない場合、デフォルトで使用されます。

+0

ありがとうToby!編集されました。 – Nathan

関連する問題