Rails 4 認証トークン 質問する

Rails 4 認証トークン 質問する

新しい Rails 4 アプリ (Ruby 2.0.0-p0 上) に取り組んでいたときに、認証トークンの問題が発生しました。

json に応答するコントローラー (respond_toクラス メソッドを使用) を作成しているときに、アクションに到達し、を使用してレコードを作成しようとすると例外createが発生し始めました。ActionController::InvalidAuthenticityTokencurl

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

Rails 3.2 (Ruby 1.9.3) を使用して同じコントローラーを記述してみましたが、認証トークンの問題はまったく発生しませんでした。調べてみると、Rails 4 では認証トークンにいくつかの変更があったことがわかりました。私の理解では、認証トークンはフォームに自動的に挿入されなくなったのでしょうか? これは何らかの形で HTML 以外のコンテンツ タイプに影響していると思います。

HTML フォームをリクエストして、認証トークンを取得し、そのトークンを使用して別のリクエストを行うことなく、この問題を回避する方法はありますか? それとも、完全に明らかなことを完全に見逃しているのでしょうか?

編集:何も変更せずにスキャフォールドを使用して新しい Rails 4 アプリで新しいレコードを作成しようとしましたが、同じ問題が発生したため、私が行った操作ではないと思われます。

ベストアンサー1

やっとわかったと思います。(新しい)デフォルトを変更しました

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のソース、具体的には次の行を見ると違いがわかります。

レール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

レール4:

def handle_unverified_request
  forgery_protection_strategy.new(self).handle_unverified_request
end

どちらが呼ぶか次の:

def handle_unverified_request
  raise ActionController::InvalidAuthenticityToken
end

おすすめ記事