gpt4 book ai didi

ruby-on-rails - Rails - 缓存表单的无效真实性 token 错误

转载 作者:行者123 更新时间:2023-12-04 03:52:09 25 4
gpt4 key购买 nike

我正在开发一个 Rails 应用程序(版本 4.2.5),它使用 rack-offline gem 来缓存一个表单,用户可以在没有互联网连接时填写该表单(条目存储为 localStorage 对象,可以提交稍后当用户有连接时)。但是,当提交表单时,出现错误

ActionController::InvalidAuthenticityToken in EntriesController#create

当我在 Rails 服务器关闭时打开一个新的浏览器窗口并导航到 http://localhost:3000/entries/new 时会发生这种情况。 (页面已被缓存 - 它呈现得很好),填写表格,然后重新打开服务器并尝试提交。

来 self 的条目 Controller :

def create
@entry = Entry.create(entry_params)
redirect_to "http://localhost:3000/entries"
end

和应用程序 Controller :

class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
end

并且在我的布局 View 中包括 <%= csrf_meta_tags %>

有什么方法可以在不影响应用安全的情况下解决这个问题?

编辑在应用程序 Controller 中,我替换了

protect_from_forgery with: :exception

protect_from_forgery with: :null_session

这就解决了问题。但是,我对所有这些意味着什么了解不够,无法理解这是否会造成安全漏洞。可以? (PS - 我真的很想避免安全漏洞)

最佳答案

csrf_meta_tags 对于 ajax 表单提交很有用,如果你有足够智能的 javascript 来使用它们的话。否则,您需要将带有 token 的常规表单字段放入您的表单中:

<%= hidden_field_tag :authenticity_token, form_authenticity_token %>

如果您以某种方式构建了一个不包含真实性 token 的表单,这可能会解决您的问题。

这里有一些其他的想法:

  1. 通过检查 HTTP 交换来检查以确保真实性 token 确实被发送到服务器
  2. 确保为您的表单提供服务的服务器与接收表单提交的服务器相同(或者至少服务器之间的 secret_key_base 匹配)
  3. 确保在提交表单时用于检索表单的 session cookie 没有丢失或过期
  4. 说到 cookie,请确保您发送的 session cookie 与您在请求表单时检索到的完全相同。当您有多个具有相同名称且设置了多个不同域字段的 cookie 时,我已经看到这种情况发生。您可以先将它们全部清除,看看最后会得到什么。

关于ruby-on-rails - Rails - 缓存表单的无效真实性 token 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37424195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com