【问题标题】:Adde authenticity token manually but it is not verified in backend手动添加真实性令牌,但未在后端验证
【发布时间】:2016-11-03 05:18:12
【问题描述】:

我的 HEAD 标记中有 <%= csrf_meta_tags %>,但我手动创建了表单,所以 authenticity_token 隐藏字段没有插入到我的表单中。

所以我手动添加了authenticity_token

<input name="authenticity_token" value="<%= form_authenticity_token %>" type="hidden">

当我发送我网站的默认联系表单(用户未登录)时,处理它的操作应验证令牌并允许/拒绝请求。但事实并非如此:我使用 jQuery 清空字段并提交表单但没有抛出错误或异常。

我在application_controller.rb 中得到了这一行protect_from_forgery with: :exception 并将其放入扩展application_controller 并具有响应联系表单的操作的foo_controller.rb 中。

那么我错过了什么?我需要做什么才能在后端验证此表单?

非常感谢!

【问题讨论】:

  • 你不需要protect_from_forgery with: :exception in foo_controller.rb 只要应用程序控制器有它。您的设置通常是正确的,但如果没有看到表单/javascript 代码,很难说出更多信息,请添加它。

标签: ruby-on-rails ruby-on-rails-4 csrf authenticity-token


【解决方案1】:

当提交的身份验证令牌丢失或与会话中的身份不匹配时,Rails 会执行protect_from_forgery with: 指定的操作,但不会终止请求处理。发生的情况是会话被破坏,因此请求被视为属于未登录的用户。

这是一篇讨论 how protect_from_forgery works 的精彩文章。

如果不查看代码很难判断,但我想说您的表单提交代码要么没有获取身份验证令牌输入值,要么在发出请求之前变得陈旧。后者可能发生在许多情况下,例如从浏览器缓存加载的页面或用于与相关页面并行登录/注销的浏览器选项卡。

【讨论】:

    猜你喜欢
    • 2017-01-01
    • 2011-03-09
    • 1970-01-01
    • 2014-06-16
    • 2017-07-15
    • 2015-07-24
    • 2014-01-06
    • 1970-01-01
    • 2016-02-27
    相关资源
    最近更新 更多