1. ホーム
  2. ruby-on-rails

[解決済み】Rails 4 認証トークン

2022-04-13 07:07:58

質問

新しいRails 4アプリ(Ruby 2.0.0-p0上)で作業しているときに、認証トークンに関する問題に遭遇しました。

jsonに応答するコントローラを書いているときに ( respond_to クラスメソッド)にたどり着きました。 create アクションを取得するようになりました。 ActionController::InvalidAuthenticityToken を使用してレコードを作成しようとすると、例外が発生します。 curl .

を設定したことを確認しました。 -H "Content-Type: application/json" でデータを設定し -d "<my data here>" が、まだうまくいきません。

Rails 3.2 (on Ruby 1.9.3) で同じコントローラを書いてみましたが、認証トークンの問題は全く発生しませんでした。いろいろ検索してみたところ、Rails 4では認証トークンについていくつか変更があったようです。私が理解したところでは、フォームに自動的に挿入されなくなったのでしょうか?私はこれが非HTMLコンテンツタイプに何らかの影響を与えていると思います。

HTML フォームをリクエストして認証トークンを取得し、そのトークンを使って再度リクエストすることなく、これを回避する方法はないでしょうか。あるいは、私は、完全に明白な何かを見逃しているのでしょうか?

編集する 何も変更せずにscaffoldを使用して新しいRails 4アプリで新しいレコードを作成してみたところ、同じ問題が発生したので、私が何かしたわけではないのでしょう。

解決方法は?

今、わかったような気がします。私は(新しい)デフォルトを変更しました

protect_from_forgery with: :exception

になります。

protect_from_forgery with: :null_session

のコメントのように ApplicationController .

# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.

のソースを見れば、その違いがわかると思います。 request_forgery_protecton.rb であり、具体的には以下の行である。

Rails 3.2 :

# This is the method that defines the application behavior when a request is found to be unverified.
# By default, \Rails resets the session when it finds an unverified request.
def handle_unverified_request
  reset_session
end

Rails 4 :

def handle_unverified_request
  forgery_protection_strategy.new(self).handle_unverified_request
end

を呼び出します。 次の :

def handle_unverified_request
  raise ActionController::InvalidAuthenticityToken
end