【问题标题】:Following The Rails getting Started Guide and getting a ActionController::InvalidAuthenticityToken遵循 Rails 入门指南并获取 ActionController::InvalidAuthenticityToken
【发布时间】:2014-02-04 05:33:24
【问题描述】:

我在此处遵循 Rails 入门指南: http://guides.rubyonrails.org/getting_started.html

我正在“创建帖子”步骤中,我设置了新视图以向我的控制器提交帖子。 当我单击视图中的提交按钮时,我收到错误 ActionController::InvalidAuthenticityToken

我能够通过在 ApplicationController 中注释掉这一行来克服错误

protect_from_forgery with: :exception

但是我不确定我是否应该这样做。这很好还是我应该更深入地研究这个问题?那条线有什么作用?

内容: /views/layouts/application.html.erb

<!DOCTYPE html>
<html>
<head>
  <title>Budget</title>
  <%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true %>
  <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
  <%= csrf_meta_tags %>
</head>
<body>

<%= yield %>

</body>
</html>

【问题讨论】:

  • 您是否从布局文件中删除了&lt;%= csrf_meta_tags %&gt; 声明?
  • 不,我根本没有修改布局文件,我用/views/layouts/application.html.erb的内容更新了我的原始帖子。我只是按照入门指南,而不是创建 Posts 控制器,而是创建了 Purchases 控制器,而不是 rails new blog,我使用 rails new budget

标签: ruby-on-rails ruby actioncontroller


【解决方案1】:

不,您不应该在ApplicationController 中评论该行。它旨在确保您的应用程序在生产级别的安全性。

来自docs:开启请求伪造保护。请记住,仅检查非 GET、HTML/JavaScript 请求。

protect_from_forgery 是 Rails 中的一项功能,可防止 Cross-site Request Forgery (CSRF) 攻击。此功能使所有生成的表单都具有隐藏的 id 字段。此 id 字段必须与存储的 id 匹配,否则不接受表单提交。这可以防止其他站点上的恶意表单或插入 XSS 的表单提交到 Rails 应用程序。无耻抄袭here

最后但并非最不重要。 the link 解释了为什么应该认真对待跨站请求伪造 (CSRF),以及为什么它很重要。

【讨论】:

    猜你喜欢
    • 2018-11-02
    • 1970-01-01
    • 2018-11-27
    • 2015-11-23
    • 2017-11-13
    • 2015-05-21
    • 2016-11-14
    • 2019-12-25
    • 1970-01-01
    相关资源
    最近更新 更多