Heroku / Rails / Devise:你想要的改变被拒绝了

时间:2015-04-04 20:59:24

标签: ruby-on-rails heroku devise csrf

我的Rails 4.2应用程序在Heroku上运行最新版本的Devise时出现问题。我将通过声明我在相当长的一段时间内没有将任何代码更改推送到生产中并且此问题仅在最近才开始来作为序言。

当我登录时,收到错误消息"您想要的更改被拒绝。"当我查看日志时,我发现它是CSRF令牌的问题。

2015-04-04T19:52:22.430533+00:00 app[web.1]: Started POST "/users/sign_in" for 76.119.72.58 at 2015-04-04 19:52:22 +0000
2015-04-04T19:52:22.435480+00:00 app[web.1]: Completed 422 Unprocessable Entity in 1ms
2015-04-04T19:52:22.434143+00:00 app[web.1]: Processing by Devise::SessionsController#create as HTML
2015-04-04T19:52:22.434211+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "authenticity_token"=>"94uXDeV2wbb1XMfUL445zrIrbhS92pwe+9tWxkyvwtJhnZtZS3ydYOeP2grZvT/t2YMa2A2k/pA+U5X3gFXlAw==", "user"=>{"email"=>"test@example.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"}
2015-04-04T19:52:22.435112+00:00 app[web.1]: Can't verify CSRF token authenticity
2015-04-04T19:52:22.438522+00:00 app[web.1]:

我一直在寻找StackOverflow的答案,并尝试了我能想到的一切。到目前为止,我尝试了一些不同的事情:

  1. 我将此行添加到我的session_store.rb,认为在开发和生产环境之间混合使用Cookie可能会出现问题。 Rails.application.config.session_store:cookie_store,key:" _abhnation_session _#{Rails.env}"

  2. 我没有rails-api宝石,some讨论建议可能是罪魁祸首。

  3. 我还注意到问题严格来说是Firefox,并不是特定于环境的。它发生在开发,测试和生产中。我只能通过短暂的会议来测试它。

    我无法弄清楚导致这种情况发生的原因。我几个月内没有对面向公众的生产环境进行任何改变。

    以下是代码链接:http://github.com/danielbonnell/abhnation-rails 这是实时网站:http://abhnation.herokuapp.com/

4 个答案:

答案 0 :(得分:7)

原来问题(至少对我而言)是由Firefox的Blur / DoNotTrackPlus扩展引起的。我以前曾禁用它,但这没有效果。然而,当我删除它时,问题就消失了。

希望这有助于将来。

答案 1 :(得分:1)

更新设置以允许iOS Safari浏览器中的cookie。

我的iOS iPhone Safari上有相同的消息,但是一旦我允许使用IOS Safari的cookie,就解决了这个问题。

答案 2 :(得分:1)

您还可以检查您的Cookie域 - 确保将其设置为正确的* .herokuapp.com域。

答案 3 :(得分:1)

对我来说,这证明是Cloudflare的问题。查看错误时,我错过了以下日志行:

HTTP Origin header (https://test-app.my.app) didn't match request.base_url (http://test-app.my.app)

我为我的域启用了灵活SSL模式。需要将此选项设置为“完全SSL”,以确保在Cloudflare与您的应用进行通信时强制使用https://