gpt4 book ai didi

javascript - js请求上的Rails ActionController::InvalidCrossOriginRequest

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

我知道这已经被提出 a few times在SO上,但我无法取得进展。我在 Rails 5.0.7.2 上。
我收到 ActionController::InvalidCrossOriginRequest每天抛出数百次。 Rollbar 说它主要是由 Bingbot 引起的,它在我的用户注册模式上,它来自 Devise。这是一个GET请求,路径是/users/sign_up .
注意:这不是表格。 这是一个简单地询问用户你想如何注册的模式?电子邮件、Facebook、谷歌身份验证等。
基本上我的网站上有一些 javascript 操作,比如 reddit 或 stackoverflow upvote 之类的图片。我没有使用 remote: true在这些链接上,但我有一个 $.ajax像这样处理upvote的调用:

var token = document.querySelector('meta[name="csrf-token"]').content;

$.ajax({
// For the upvote, type will be POST
type: $this.data('method'),
beforeSend: function(xhr) {
xhr.setRequestHeader('X-CSRF-Token', token)
},
url: $this.data('url'),
success: function(data) {
// Some cleanup...
}
});
一旦登出的访问者尝试投票,它就会触发 ajax 请求,然后停止(未授权)并重定向,如下所示:
Started POST "/upvotes/toggle_vote"
Processing by UpvotesController#toggle_vote as */*
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)


Started GET "/users/sign_up"
Processing by RegistrationsController#new as */*
这是我覆盖的设计 Controller :
class RegistrationsController < Devise::RegistrationsController

def new
# ... other code

respond_to do |format|
format.js { render layout: false }
format.html { respond_with self.resource }
end
end
end
/views/devise/registrations内部我有 new.js.erb这会打开“您想如何注册?”模态的。
我试过的:
  • 我不认为通过添加 protect_from_forgery except: :new 来解决它是正确的答案(正如在类似问题中提出的那样),因为这本质上是不安全的。
  • 我尝试重新排序 respond_to根据 this 的格式但这使得注册模式无法打开。
  • 我试图输入 format.any { raise ActionController::RoutingError.new("Not Found") } respond_to 中的全部内容 block ,但这并没有解决错误。
  • 正如您在 $.ajax 中看到的那样上面调用我什至尝试设置X-CSRF-Token标题。

  • 顺便说一句,完整的错误文本是这样的: ActionController::InvalidCrossOriginRequest: Security warning: an embedded <script> tag on another site requested protected JavaScript. If you know what you're doing, go ahead and disable forgery protection on this action to permit cross-origin JavaScript有任何想法吗?
    会不会是因为 UpvotesController#toggle_vote 之后真实性 token 丢失了?重定向到 RegistrationsController#new以及从 POST 到 GET 的变化?

    最佳答案

    您需要使用修改服务器中资源的 ajax 请求发送真实性 token (post/put/patch/delete)。通常,rails 会为您将其添加为表单中的隐藏字段。

    关于javascript - js请求上的Rails ActionController::InvalidCrossOriginRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67129624/

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