问题标签 [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.
ruby-on-rails - Rails 4 升级抛出 InvalidAuthenticityToken
我的应用程序刚刚升级到 Rails 4,我们开始看到随机的 InvalidAuthenticityToken 错误。我做了一堆调查,但还没有找到解决方案。任何人都知道发生了什么以及如何解决它?
指出出现在其他类似 SO 问题中但不适用于我的事情:
我们protect_from_forgery with: :exception
在 ApplicationController 中调用,但我们也在 Rails 3 中这样做并且没有出现此错误。
我已确认这些是以标准方式使用网站的普通用户;这些不是 CSRF 尝试。
这些不是 API 调用,它们是标准的 Web 表单提交。
真实性令牌存在于表单(通过 Railsform_for
或form_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,我无法在本地复制。
ruby-on-rails - 随机 POST 请求导致 Devise RegistrationsController#create 抛出 ActionController::InvalidAuthenticityToken
我ActionController::InvalidAuthenticityToken
大约每 30 分钟就会在生产中遇到随机异常。/
由于自定义设计路线(来自本教程) ,设计的 RegistrationsController 会接收 POST 请求。
用 at/signup
完美注册(没有InvalidAuthenticityToken
错误),但在生产中,我猜有刮板或爬虫设置它...
设计路线:
Rails 日志反馈:
有没有办法来解决这个问题?
谢谢
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
ruby-on-rails - 覆盖 railsauthentity_token 设置
提交表单需要接收服务器命名的令牌,并且需要一个authenticity_token
只有发布和接收服务器才知道的字符串:
如果我调用实例或全局变量,则会呈现该值。但是,即使控制器设置了以下过滤器:
我是否尝试
或者
或者
Rails 最终使用自己的会话设置值和渲染来压缩每个值:
如何在此控制器操作中覆盖 rails 默认行为?
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 应用程序上实现一个场景?
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 值应该是什么?
如果有人可以提供一些指导,将不胜感激。
谢谢你。
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
不包含文件,我不会收到此错误。
控制器:
docker - ActionController::InvalidAuthenticityToken 与 devise、rails 和 docker
我在 docker 容器中运行的 rails 5 应用程序的每个发布请求都会收到 InvalidAuthenticityToken 异常。我在应用程序中使用设计,这与设计或其他有关吗?
java - Redmine / Java native:通过脚本更新查询。克隆 Fiddler 请求
我正在编写一个脚本来更新我们在每次部署 sprint 时在项目中使用的几个查询。
我正在尝试通过以下方式复制我在 Fiddler 上测试的相同请求,它正在工作:
数据的authentity_token 和会话cookie 都是假的,但我正在复制粘贴Fiddler 的。我正在添加主机和内容长度,因为 Fiddler 总是添加它们。
Fiddler 返回正确的 302 状态,因为 Redmine 重定向了页面。使用上面的代码,我收到一个 422 状态(无法处理的实体),正文中有此消息: 无效的表单真实性令牌
我花了 3 天时间试图弄清楚我在克隆请求时做错了什么。有什么线索吗?
ruby-on-rails - 如何在rails中处理来自应用程序控制器的无效真实性令牌json请求
当用户尝试使用脚本或自动化填写表单时,应用程序控制器会引发错误
“ActionController::InvalidAuthenticityToken”
当有效的真实用户填写表单、关闭浏览器、从浏览器历史记录中重新打开页面并提交表单时,就会发生这种情况。
在这种情况下,我不想使用异常通知器发送异常,并且我还想显示带有刷新的请求消息的模式。
所以我将application_controller修改为
我想让它适用于所有类型的请求。
我添加了对 html & js 请求的响应
但没有得到如何处理 json 请求。
PS > json 请求是从 Web 应用程序发送的,用于加载更多案例,有时会引发异常,所以我要处理这个。
我的 Rails 版本是 4.2