0

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

所以我authenticity_token手动添加了:

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

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

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

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

非常感谢!

4

1 回答 1

0

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

这是一篇很好的文章,讨论了protect_from_forgery 的工作原理

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

于 2016-06-30T23:19:42.817 回答