Rails的5我有一个简单的应用程序,我使用Rails 5.0.0.1(应用程序被调用SimpleTest的 - 它是那样简单,因为我可以把它),以图出一些东西在Rails 5.我得到一个奇怪的错误。的ActionController :: InvalidAuthenticityToken采用后仅
这里的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
而这里的应用程序/视图/富/ 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 :: InvalidAuthenticityToken在FooController的#巴兹
我已经签了一堆答案。我有在应用程序/视图/布局/ application.html.erb <%= csrf_meta_tags %>
。
这仅发生后。得到它,它工作正常。不过,我需要使用帖子。
此外,有一个解决方案,但它并没有道理给我。我可以将下面的代码添加到我的控制器,如果格式是JSON它(如果我正确地理解它)应重置会话的顶部,突然它的工作原理:
protect_from_forgery with: :reset_session, if: ->{request.format.json?}
但格式文本/ html!此外,会议并未重置(我可以通过session[:qux]
告诉为什么会这样有什么影响。如果我只是用:?
protect_from_forgery with: :reset_session
它的工作原理,但当然重置会话使用:null_session
。地方:reset_session
有同样的效果(包括有和没有,如果) 我还没有做什么特别的除了添加代码,所有我所做的就是:。
rails new simpletest
[copied over Gemfile]
bundle install
rails generate controller foo bar
我跑红宝石2.3。 0p0(2015-12-25 revision 53290)[x86_64-linux]在Debian 8上。
当您提交表单,你看到的authenticity_token参数?(你可以在错误页面的底部看到一个参数列表) – jphager2
'