gpt4 book ai didi

ruby-on-rails - Rails 4 删除按钮将我注销并导致 "Can' t 验证 CSRF token 的真实性”

转载 作者:行者123 更新时间:2023-12-03 16:05:42 24 4
gpt4 key购买 nike

我正在运行 Rails 4.2、Devise 3.4.1 和 CanCan 1.6.10。当我尝试通过如下所示的标准删除按钮删除资源时,我退出并重定向到登录页面。
<a data-confirm="Are you sure?" class="btn-alert" rel="nofollow" data-method="delete" href="/admin/lots/6">Delete</a>
我的开发日志告诉我这是因为它“无法验证 CSRF token 的真实性”。我似乎可以让它起作用的唯一方法是从删除按钮更改为发布到删除操作的表单,但这有点愚蠢。我已经在其他 Rails 4 应用程序中这样做了,所以我很确定我做对了。

index.html.erb

<% if can? :destroy, lot %>
<%= link_to "Delete", admin_lot_path(lot.id), method: :delete, data: {confirm: "Are you sure?"}, class: 'btn-alert' %>
<% end %>

lot_controller.rb
class Admin::LotsController < ApplicationController
before_filter :authenticate_user!
load_and_authorize_resource

def destroy
@lot.destroy
redirect_to admin_lots_path, notice: "Lot was successfully removed."
end
end`

就像我说的,用表单替换按钮似乎可行,但这并不理想。
<%= form_for([:admin, lot], method: :delete) do |f| %>
<%= f.submit value: "Delete", class: 'btn-standard', data: {confirm: "Are you sure?"} %>
<% end %>

如果我注释掉 before_filter :authenticate_user!load_and_authorize_resource从 Controller 它的工作原理。我假设 csrf token 不会像在表单中那样与此请求一起发送。

有人对我可以尝试的方法有任何想法吗?如果有帮助,愿意发布更多代码。这发生在我的应用程序中的所有删除中。

更新 :这是 development.log 的一个片段
Started DELETE "/admin/lots/6" for 127.0.0.1 at 2015-05-26 15:03:22 -0500
Processing by Admin::LotsController#destroy as HTML
Parameters: {"id"=>"6"}
Can't verify CSRF token authenticity

最佳答案

使用 button_to而不是 link_to .

button_to "Delete", admin_lot_path(lot.id), method: :delete, data: {confirm: "Are you sure?"}, class: 'btn-alert'
link_to生成此缺少真实性标记的 HTML,
<a data-confirm="Are you sure?" class="btn-alert" rel="nofollow" data-method="delete" href="/admin/lots/6">Delete</a>

button_to产生
<form class="button_to" method="post" action="/admin/lots/6">
<input type="hidden" name="_method" value="delete">
<input data-confirm="Are you sure?" class="btn-alert" type="submit" value="Delete">
<input type="hidden" name="authenticity_token" value="1QajBKKUzoEtUqi6ZX8DsQtT9BfvKY/WVXAr4lu4qb+iLGMkLlsviNcctlGxyq+VrsMa+U9vmb4PAdaRFDKZVQ==">
</form>

关于ruby-on-rails - Rails 4 删除按钮将我注销并导致 "Can' t 验证 CSRF token 的真实性”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30469262/

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