のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

Ruby on Rails のサーバーにPOSTが送れない!?(Can't verify CSRF token authenticity)

Sponsored Links

皆さんこんにちは
お元気ですか。お腹すいた。じゃがいもつくろう。

Railsで作ったサーバーに対してPostを送信すると以下のような
エラーが出て困った。

Can't verify CSRF token authenticity
Completed 422 Unprocessable Entity in 1ms

ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):

ところでCSRFとはなんでしょうか?Cross-Site Request Forgeriesの略で、POSTするところに誘導するような攻撃のようです。これを防ぐ為に実装されたとかなんとか。

解決方法
ApplicationControllerのprotect_from_forgery, :exceptionの箇所を、null_sessionとする。作った時のコメントに書いてあるとは…、

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :null_session
end

調べたところによるとRailsのバージョンによって挙動が違うので気をつけなければいけません。