私は単純なアプリケーションを持っていますが、Rails 5.0.0.1を使用しています(このアプリケーションはsimpletestと呼ばれています。私は奇妙なエラーが発生しています。ActionController :: InvalidAuthenticityToken in Rails 5 with post only
はここでここでのconfig/routes.rbを
Rails.application.routes.draw do
root "foo#bar"
get "dobaz" => "foo#bar"
match "dobaz" => "foo#baz", via: :post
end
だアプリ/コントローラ/ foo_controller.rb
class FooController < ApplicationController
def baz
if session[:qux].nil? || params[:reset] == "true"
session[:qux] = 0
else
session[:qux] += 1
end
@qux = session[:qux]
@format = request.format
render 'bar'
end
end
だし、ここでのアプリ/ビュー/ fooの/ bar.html.erb
<p>Qux: <%= @qux %></p>
<p>Format: <%= @format %></p>
<form action="/dobaz" method="post">
<p>Reset:
<input type="radio" name="reset" value="true">True</input>
<input type="radio" name="reset" value="false">False</input>
<input type="submit"/>
</form>
私は認証やログインなど何も使用していません。私は(明らかに)セッションを使用しています。
私は実際にアプリを実行しようとすると、私は例外ページに次のエラーを取得:
ActionController :: FooController#バズでInvalidAuthenticityToken
私は答えの束をチェックしました。私は<%= csrf_meta_tags %>
をapps/views/layouts/application.html.erbに持っています。
これは投稿時にのみ発生します。 getでは、うまく動作します。しかし、私はポストを使用する必要があります。
さらに解決策もありますが、それは私には意味がありません。私は、フォーマットはJSONであれば、セッションをリセットする必要があります(私はそれを正しく理解していれば)私のコントローラの先頭に次のコードを追加することができ、そして突然、それが動作します:
protect_from_forgery with: :reset_session, if: ->{request.format.json?}
が、フォーマットが/テキストですhtml! 。?また、セッションが(私はsession[:qux]
を経由して言うことができるように私は使用している場合は、なぜこれがどんな効果を持つことになりリセットされていない:
protect_from_forgery with: :reset_session
それは動作しますが、もちろんそれは、セッションをリセットで:null_session
を使用します。 :reset_session
の場所は(ととがなければ両方)と同じ効果があり、私は何も特別なコードを追加する以外にやった 、私がやったすべてがある:。。私はルビー2.3を実行している
rails new simpletest
[copied over Gemfile]
bundle install
rails generate controller foo bar
。 0p0(2015-12-25リビジョン53290)Debian 8の[x86_64-linux]
フォームを送信すると、あなたはauthenticity_tokenパラメータを見ていますか?(あなたが底部に向かっエラーページのリクエストからパラメータのリストを見ることができます) – jphager2
'の」>' –