【发布时间】:2021-09-26 05:17:59
【问题描述】:
ruby 3.0.1rails 6.1.2'devise', '~> 4.7', '>= 4.7.3'
我的处境很不寻常。我正在将 Rails 安装从一台服务器迁移到另一台服务器。我相信我已经完成了大约 95% 的工作,刚刚恢复了生产数据库。
但是,任何涉及表单提交的事情,包括用户注册和登录,都会给我错误页面:
The change you wanted was rejected.
Maybe you tried to change something you didn't have access to.
服务器日志给了我更多帮助:
Completed 422 Unprocessable Entity in 2ms (Allocations: 433)
FATAL -- ActionController::InvalidAuthenticityToken
这让我很困惑。因为我确实重新生成了 master.key 和 credentials.yml.enc 并通过 RAILS_MASTER_KEY 环境变量使 master.key 的内容可用。这意味着表单包含正确的<input type="hidden" name="authenticity_token" value="<removed for stack_overflow>"> 以防止跨站点脚本攻击。
我认为这与会话无关,因为即使用户注册也会受此影响。我正在使用 Devise 进行身份验证。
但是……现在我碰到了一堵砖墙。从这里无处可去。有谁知道怎么回事?
更新 1
添加skip_before_action :verify_authenticity_token 确实让我跳过了这个问题。作为解决方案,我不满意。
更新 2
我有这些元标记。
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
【问题讨论】:
-
您清除浏览器cookies并重试了吗?
-
我刚刚尝试这样做。不过,问题仍然存在。如果这是解决方案,我会大吃一惊的。
-
你在用
devise吗? -
是的,我会将其添加到我的帖子中,以防对其他人有所帮助。
-
这可能会有所帮助:gist.github.com/db0sch/19c321cbc727917bc0e12849a7565af9,我阅读并看到了一个重要说明:“..devise.rb 有问题。我只是取消注释了 secret_key = ... 只是运行时间重新生成凭据文件的命令,然后再次注释掉该行”。
标签: ruby-on-rails ruby authentication