gpt4 book ai didi

ruby-on-rails - Rails 5 中的 ActionController::InvalidAuthenticityToken 仅发布

转载 作者:数据小太阳 更新时间:2023-10-29 08:43:31 25 4
gpt4 key购买 nike

我有一个简单的应用程序,我正在使用 Rails 5.0.0.1(该应用程序称为 simpletest - 它尽可能简单)以便在 Rails 5 中解决一些问题。我感到很奇怪错误。

这是config/routes.rb

Rails.application.routes.draw do
root "foo#bar"
get "dobaz" => "foo#bar"
match "dobaz" => "foo#baz", via: :post
end

这是 app/controllers/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

这是 apps/views/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>

我没有使用任何身份验证或登录或其他任何东西。我(显然)正在使用 session 。

当我尝试实际执行该应用程序时,我在异常页面上收到以下错误:

FooController 中的 ActionController::InvalidAuthenticityToken#baz

我检查了一堆答案。我有 <%= csrf_meta_tags %>在 apps/views/layouts/application.html.erb 中。

这只发生在 post 中。使用get,它工作正常。但是,我需要使用 post。

此外,还有一个解决方案,但对我来说没有意义。我可以将以下代码添加到我的 Controller 的顶部,如果格式是 json,它(如果我理解正确的话)应该重置 session ,并且突然它起作用了:

protect_from_forgery with: :reset_session, if: ->{request.format.json?}

但是格式是text/html!此外, session 没有被重置(我可以通过 session[:qux] 得知。为什么这会有任何影响?如果我只是使用:

protect_from_forgery with: :reset_session

它有效,但当然会重置 session 。使用 :null_session代替 :reset_session具有相同的效果(有和没有 if)。我没有做什么特别的事。除了添加代码,我所做的就是:

rails new simpletest
[copied over Gemfile]
bundle install
rails generate controller foo bar

我在 Debian 8 上运行 ruby​​ 2.3.0p0(2015-12-25 修订版 53290)[x86_64-linux]。

最佳答案

问题是您需要使用表单助手,它会自动为 authenticity_token 设置隐藏输入。

在您的 View 中,您可以只使用 form_tag(这是这种类型中最简单的助手)

<!-- in app/views/foo/bar.html.erb -->
<%= form_tag "/dobaz" do %>
<p>Reset:
<input type="radio" name="reset" value="true">True</input>
<input type="radio" name="reset" value="false">False</input>
<input type="submit"/>
<% end %>

关于ruby-on-rails - Rails 5 中的 ActionController::InvalidAuthenticityToken 仅发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40856586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com