2017-01-13 12 views
0

私はprotect_from_forgery http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection.htmlのメモを読んでいます。これらの数行は本当に私を混乱させます。APIリクエストのRequestForgeryProtectionに関するRailsドキュメント

それはそのXMLやJSONの要求にも影響を受けているとあなたがAPIを構築している場合は、ApplicationControllerに(デフォルトでは::例外):で偽造保護方法を変更する必要があります覚えておくことが重要です

class ApplicationController < ActionController::Base 
    protect_from_forgery unless: -> { request.format.json? } 
end 

CSRF保護は、protect_from_forgeryメソッドを使用してオンになっています。デフォルトでは、protect_from_forgeryはあなたのセッションを保護します:null_sessionメソッド。リクエスト中に空のセッションを提供します。それは例外を言っていた

protect_from_forgery unless: -> { request.format.json? }のデフォルトですが、後で言っnull_sessionはprotect_from_forgeryのデフォルトです。

protect_from_forgery unless: -> { request.format.json? }を使用している場合、例外がデフォルトになりますか? protect_from_forgeryを使用している場合、null_sessionがデフォルトになりますか?

ご協力いただきまして誠にありがとうございます。

答えて

1

少し混乱してもドキュメントは正確です。各ステートメントは異なる「デフォルト」の動作を参照します。どのような最初の文が意味することは、新規のRailsアプリケーションのデフォルトはこのラインであなたのApplicationControllerに生成することであるということである。

protect_from_forgery :exception 

二文が意味するところを、しかし、であるprotect_from_forgery方法、パラメータのデフォルト値について省略された場合は:null_sessionです。あなたはつまり、あなたがちょうど持っていた、あなたのApplicationControllerにから:exceptionを削除していたのであれば:

protect_from_forgery 

次に使用挙動は:null_sessionのことだろう(証明のためimplementationを参照してください)。

最初の文は、新しいRailsアプリケーションのデフォルト生成コードを参照しています。 2番目のステートメントは、メソッド自体のデフォルト値を参照します。彼らが違うのは変だ。

+0

だとわかりました。ありがとう! – LOCKLOCK

関連する問題