问题标签 [authenticity-token]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
240 浏览

ruby-on-rails - Rails 4 升级抛出 InvalidAuthenticityToken

我的应用程序刚刚升级到 Rails 4,我们开始看到随机的 InvalidAuthenticityToken 错误。我做了一堆调查,但还没有找到解决方案。任何人都知道发生了什么以及如何解决它?

指出出现在其他类似 SO 问题中但不适用于我的事情:

我们protect_from_forgery with: :exception在 ApplicationController 中调用,但我们也在 Rails 3 中这样做并且没有出现此错误。

我已确认这些是以标准方式使用网站的普通用户;这些不是 CSRF 尝试。

这些不是 API 调用,它们是标准的 Web 表单提交。

真实性令牌存在于表单(通过 Railsform_forform_tag生成)和提交的请求中。

我的会话不应该设置过期时间,因为我没有设置过期时间,而且 Rails 默认是永久的,而且我的用户不经常登录或退出(所以过期的令牌不太可能,就像“打开一个选项卡,登录到单独的选项卡,返回打开标签并尝试操作”)。

生成与我的csrf_meta_tag表单相同的令牌并删除它没有帮助。

我的用户确认他们至少在 Firefox、Chrome 和 Safari 上体验过这种情况。

所有代码都可以在 Github 上找到。

可能相关:如果我secret_key_base在 secrets.yml 中更改我的开发并更改我的session_store.rb文件以使用: Rails.application.config.session_store :cookie_store, key: '_glowfic_constellation_' + Rails.env, domain: 'glowfic.com', tld_length: 2并重新启动服务器,我将注销并且可以在尝试登录时 100% 可靠地遇到此错误。

编辑调出更多的东西:

我无法强制清除所有会话,因为我使用 cookie 存储,但是我已经在生产中重置了 secret_key_base 和 cookie 名称,这(很难说,但我认为)有帮助吗?但没有解决问题。

“可能相关”似乎无关,并且与不支持“localhost”的域“glowfic.com”相关;如果我改用域 localhost,我无法在本地复制。

0 投票
0 回答
131 浏览

ruby-on-rails - 随机 POST 请求导致 Devise RegistrationsController#create 抛出 ActionController::InvalidAuthenticityToken

ActionController::InvalidAuthenticityToken大约每 30 分钟就会在生产中遇到随机异常。/由于自定义设计路线(来自本教程) ,设计的 RegistrationsController 会接收 POST 请求。

用 at/signup完美注册(没有InvalidAuthenticityToken错误),但在生产中,我猜有刮板或爬虫设置它...

设计路线:

Rails 日志反馈:

有没有办法来解决这个问题?

谢谢

0 投票
1 回答
2543 浏览

ruby-on-rails - CSRF 令牌与会话中的内容不匹配(Rails 4.1)

我们在 Rails 4.1 应用程序中看到了一个不幸且可能基于浏览器的 CSRF 令牌真实性问题。我们在这里发布它是为了询问社区其他人是否也看到它。

请注意,大多数错误报告工具(如 Honeybadger)会自动抑制ActionController::InvalidAuthenticityToken,因此您通常不会在错误报告工具中看到问题,除非您特意去查看它。

这就是问题所在,这不是一个开发问题——它是一个尚未诊断的生产问题。

我们看到的异常只是正常登录我们网站时的 ActionController::InvalidAuthenticityToken。在仔细检查表单发送的authentity_token和会话的_csrf_token(我们使用active_record_store 作为我们的session_store 设置)后,它们只是不匹配。经过直接检查,我只能得出结论,它们是完全不同的令牌,但我不知道为什么。

我们广泛地看到了这个问题,大概是我们高流量网站的 1-2%。我只在生产中看到它,我无法在开发中重现它。

我在 IE 11 和 Edge 浏览器上看到它最多(你会注意到 Rails 4.1 是在 IE 11 和 Edge 之前发布的),但也在 Android 上的 Chrome 和偶尔的移动 Safari 上看到。

我们的缓存控制标头设置如下:

Cache-Control: max-age=0, private, must-revalidate

0 投票
2 回答
942 浏览

ruby-on-rails - 覆盖 railsauthentity_token 设置

提交表单需要接收服务器命名的令牌,并且需要一个authenticity_token只有发布和接收服务器才知道的字符串:

如果我调用实例或全局变量,则会呈现该值。但是,即使控制器设置了以下过滤器:

我是否尝试

或者

或者

Rails 最终使用自己的会话设置值和渲染来压缩每个值:

如何在此控制器操作中覆盖 rails 默认行为?

0 投票
3 回答
2476 浏览

javascript - 处理 Rails 中 navigator.sendBeacon 请求的 CSRF 真实性令牌

在上面的代码中,我希望使用有效负载将 POST 发送到 '/analytics' url。我在尝试触发请求时收到以下错误(警告) :

Promise.js:840 未处理的拒绝:TypeError:无法在字符串'{“slug”:“test-page-by-marvin-danig”,“localFlipCount”:1,“time”:1524241435403}'上创建属性'authenticity_token'

嗯。

…发出请求,我得到:


更新:问题仍未解决。这是我现在所处的位置:

我打开了以下 GET 和 POST 路由routes.rb

这些显然映射到analytics_controller这样的:

除了该auth_token方法之外,我还获得了一个auth_token.json.erb模板,该模板按照以下方式发送:

客户端javascript(草稿)采用以下方式:

触发的请求对象navigator.sendBeacon不正确,因为X-CSRF-Token未设置,我显然在服务器端收到以下错误:

有没有人navigator.sendBeacon使用服务工作者在一个完全离线的页面上在 Rails 应用程序上实现一个场景?

0 投票
1 回答
781 浏览

ruby-on-rails - Rails Shopify 应用程序中的 InvalidAuthenticityToken

我有一个使用 shopify_app gem 的 Shopify 应用程序。我试图将表单发布到管理页面,但不断收到 InvalidAuthenticityToken。我正在使用 Rails 5.1.6 并设置了 config.action_controller.per_form_csrf_tokens = false 来帮助识别问题。我已经确认元 csrf-token、authenticity_token 表单字段和authentity_token 被发布到服务器所有相同的值。

控制器继承了 ShopifyApp::AuthenticatedController 并且我已经删除了所有 before_actions。

有没有办法记录预期的authenticity_token 值应该是什么?

如果有人可以提供一些指导,将不胜感激。

谢谢你。

0 投票
1 回答
107 浏览

ruby-on-rails - 在表单中附加文件会导致 InvalidAuthenticityToken 错误和 UnknownFormat 错误

我应该使用Carrierwave gem提交图像文件的表单发生了一些奇怪的事情。这是表格:

这是控制器:

这是我得到的第一个错误:

ActionController::InvalidAuthenticityToken in PostsController#create_post ActionController::InvalidAuthenticityToken

如果我通过将此行添加到表单中手动设置令牌,此错误就会消失:

但后来我得到这个错误:

PostsController#create_post
ActionController::UnknownFormat 中的 ActionController::UnknownFormat

将此行突出显示为有问题的:

如果我删除此行,两个错误都会消失:

没有该行,表单将正常提交。我使用 Carrierwave 文件提交编写了许多表单,但从未遇到过任何这些问题。我在同一个应用程序中还有其他表单,除了文件提交字段外,其他所有表单都相同,它们工作正常。这是怎么回事?

更新

我认为这不仅仅是身份验证问题或提交为 JS 的问题。手动添加身份验证令牌修复了一个错误,但是我写了很多表单,包括 AJAX 文件提交表单,都没有这样的错误,而且我也无法理解为什么添加文件会影响真实性令牌,所以我想更深层次的东西是错的。

更新 2

事实证明,它与 Carrierwave 或创建的带有附加图像的 Post 无关,而是与提交的包含文件的参数无关。当我使用香草文件上传输入时,错误仍然存​​在:

但是,如果我将文件上传留空并在create_post操作中使用 binding.pry 来设置帖子的图像属性,那么一切都没有问题。

但它变得更奇怪了:即使我手动设置了真实性令牌,然后将create_post操作重定向到不同的操作,然后尝试执行 a respond_to,我仍然会收到 UnknownFormat 错误。同样,如果发送到的参数create_post不包含文件,我不会收到此错误。

控制器:

0 投票
0 回答
255 浏览

docker - ActionController::InvalidAuthenticityToken 与 devise、rails 和 docker

我在 docker 容器中运行的 rails 5 应用程序的每个发布请求都会收到 InvalidAuthenticityToken 异常。我在应用程序中使用设计,这与设计或其他有关吗?

0 投票
1 回答
174 浏览

java - Redmine / Java native:通过脚本更新查询。克隆 Fiddler 请求

我正在编写一个脚本来更新我们在每次部署 sprint 时在项目中使用的几个查询。

我正在尝试通过以下方式复制我在 Fiddler 上测试的相同请求,它正在工作:

数据的authentity_token 和会话cookie 都是假的,但我正在复制粘贴Fiddler 的。我正在添加主机和内容长度,因为 Fiddler 总是添加它们。

Fiddler 返回正确的 302 状态,因为 Redmine 重定向了页面。使用上面的代码,我收到一个 422 状态(无法处理的实体),正文中有此消息: 无效的表单真实性令牌

我花了 3 天时间试图弄清楚我在克隆请求时做错了什么。有什么线索吗?

0 投票
2 回答
912 浏览

ruby-on-rails - 如何在rails中处理来自应用程序控制器的无效真实性令牌json请求

当用户尝试使用脚本或自动化填写表单时,应用程序控制器会引发错误

“ActionController::InvalidAuthenticityToken”

当有效的真实用户填写表单、关闭浏览器、从浏览器历史记录中重新打开页面并提交表单时,就会发生这种情况。

在这种情况下,我不想使用异常通知器发送异常,并且我还想显示带有刷新的请求消息的模式。

所以我将application_controller修改为

我想让它适用于所有类型的请求。

我添加了对 html & js 请求的响应

但没有得到如何处理 json 请求。

PS > json 请求是从 Web 应用程序发送的,用于加载更多案例,有时会引发异常,所以我要处理这个。

我的 Rails 版本是 4.2