私はRailsでフルページキャッシュを取得しようとしていますが、私はCSRFに関して多大な悩みを抱えています。私は現在、form_authenticity_token
という文字列をJSがアクセスしてヘッダタグを書き換えることができるクッキーに格納しています。Rails 4認証トークン - ヘッダーとフォームの両方に隠れた入力?
私は、生成されたHTML内のトークンを見つける2ヶ所あります。フォームの隠されたinput要素の内側ヘッド
<meta name="csrf-token" content="[hash]">
2)では
1)
<input type="hidden" name="authenticity_token" value="[different hash]">
示されているように、これらのハッシュは互いに異なっています(キャッシュがenablでない開発モードで) ed)。彼らはなぜ異なっているのですか?なぜ私は頭のメタタグを削除し、フォーム入力だけを残してリクエストが許可されるのですか?しかし、フォームの入力タグを削除してヘッダを残すと、リクエストは拒否されますか?
効果的には、これはヘッドタグが役に立たないという意味ですか?ヘッダータグと同じように、フォーム入力タグをCookieの値に書き換えることができますが、それらは互いに異なるため、フルページキャッシングの最終結果が何を意味するかは慎重です。
アプリケーションコントローラが含まれています
protect_from_forgery with: :exception
before_filter :csrf_cookie
def csrf_cookie
cookies['authenticity-token'.freeze] = {
value: form_authenticity_token,
expires: 1.day.from_now,
secure: (Rails.env.staging? || Rails.env.production?)
}
end