【问题标题】:Rails Error: ActionController::InvalidAuthenticityTokenRails 错误:ActionController::InvalidAuthenticityToken
【发布时间】:2015-11-23 16:44:39
【问题描述】:

我收到此错误:ActionController::InvalidAuthenticityToken 在我的 web 应用程序上的每个帖子请求中。

我的临时解决方案是将其添加到控制器中:skip_before_action :verify_authenticity_token 但当然会造成漏洞...

有谁知道我为什么会收到这个错误,所以我可以在不造成漏洞的情况下修复它?

谢谢。

【问题讨论】:

  • 您如何提出发帖请求?
  • 使用常规 html。这是为什么?我需要使用导轨吗?我该怎么做?
  • 您可以将控制台输出发布到您的帖子中吗?此外,还有任何其他影响您的 POST 请求的控制器?
  • 您目前使用的 Rails 版本是什么?
  • 你有 CSRF 元标签吗?您是否使用 Rails 表单助手以便 CSRF 标记包含在表单参数中?您是否有某种缓存可能会导致向客户端发送陈旧的 CSRF 令牌?

标签: ruby-on-rails authentication


【解决方案1】:

您需要通过 HTTP 调用向控制器发送身份验证令牌。通常,如果您使用 form_for 助手,则不需要显式发送真实性令牌。但是如果您使用 HTML 表单 <form> 或 Ajax 请求,那么您必须在调用时发送此令牌。

Ajax

$.ajax({  
.....,  
beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))},  
....... });

Form把这个放在html表单标签里

<%= tag(:input, :type => "hidden", :name => request_forgery_protection_token.to_s, :value => form_authenticity_token) %> 

【讨论】:

  • 我有一个与此不完全相关的问题。但是有没有一种方法可以让用户伪造表单并提交一个伪造的表单,例如更改数字输入中的最大值?如果是这样,我该如何防止这种情况发生,或者 AuthenticityTokens 是否已经完成了所有这些工作?
  • 另外,当你说把它放在 html 表单标签中时,它到底在哪里?只是
    "hidden", :name => request_forgery_protection_token.to_s, :value => form_authenticity_token) %> >
猜你喜欢
  • 2016-11-14
  • 2018-11-02
  • 2018-11-27
  • 2017-11-13
  • 2015-05-21
  • 2019-12-25
  • 1970-01-01
  • 2015-01-10
  • 2019-06-23
相关资源
最近更新 更多