Ruby on rails Rails/Heroku/Cloudflare:Can';t在域更改后验证CSRF令牌的真实性

Ruby on rails Rails/Heroku/Cloudflare:Can';t在域更改后验证CSRF令牌的真实性,ruby-on-rails,heroku,session-cookies,csrf,cloudflare,Ruby On Rails,Heroku,Session Cookies,Csrf,Cloudflare,我们有一个Rails 5.2.3应用程序正在使用Desive 4.6.2进行生产,并部署在Heroku。该应用程序使用了domain example.com,一切正常。今天,我们需要将该域更改为app.example.com(example.com现在是WordPress网站),现在当我们尝试登录该应用时,我们得到: Can't verify CSRF token authenticity Completed 422 Unprocessable Entity in 19ms ActionCont

我们有一个Rails 5.2.3应用程序正在使用Desive 4.6.2进行生产,并部署在Heroku。该应用程序使用了domain example.com,一切正常。今天,我们需要将该域更改为app.example.com(example.com现在是WordPress网站),现在当我们尝试登录该应用时,我们得到:

Can't verify CSRF token authenticity
Completed 422 Unprocessable Entity in 19ms
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_controller/metal/request_forgery_protection.rb:211:in `handle_unverified_request'
我意识到的一件事是,现在我们的生产应用程序没有设置会话cookie。我们的登台应用程序(使用example.herokuapp.com域)设置了一个名为“\u myapp\u session”的cookie(它仍然工作正常),而在我们的生产应用程序中没有设置cookie。 在谷歌上搜索时,我发现有人提到了session_store.rb config(我们甚至没有这个文件),所以我在config/initializers中创建了这个文件,并尝试设置为我们的app.example.com域和domain::all,但这似乎没有任何区别

Rails.application.config.session\u存储:cookie\u存储,键:''u app\u myapp\u session',domain::all

我错过了什么?为什么域更改会阻止应用程序创建会话cookie?
哦,我们正在使用Cloudflare作为我们的DNS,它的cfduid cookie设置正确。这可能有关系吗?

所以,很明显,它确实与Cloudflare有关。我们在Cloudflare的DNS上的app.example.com条目被“代理”,一旦我将其设置为“仅DNS”,并等待了几分钟,我们的会话cookie又开始出现

我刚刚意识到Cloudflare有自己的缓存,所以我已经清除了它,并将尝试再次使用“代理”设置,但如果这不起作用,我将把它用作DNS


如果有人知道为什么Cloudflare的代理设置会阻止设置cookies,请告诉我。谢谢

你读过这篇关于Cloudflare缓存页面和CSRF的文章吗

差tl;dr:如果你缓存一个带有CSRF保护表单的页面,你必须使用Ajax更新反CSRF


哦,我还没有读过那篇文章。谢谢分享,我会看看我们是否可以尝试!