ruby-on-rails – 无处不在的AuthenticityToken

我有一个我刚刚部署的rails应用程序,它在提交表单的任何地方都会生成Invalid AuthenticityToken错误.该应用程序使用子域名作为帐户名称,最终还允许输入自定义域名.我在production.rb中有一个条目,允许跨域会话处理.

问题是您无法登录/或提交任何表单,因为所有内容都会引发Invalid AuthenticityToken错误.这个问题看起来与Rails – Invalid Authenticity Token After Deploy相似但不一样,而且我没有使用mongrel.我已经尝试在浏览器中清除cookie,重新启动乘客但没有运气.

有人有主意吗?

服务器正在运行nginx乘客2.3.11和Rails 2.3.5.

#production.rb
config.action_controller.session[:domain] = '.domain.com'


#environment.rb
config.action_controller.session = {
   :session_key => '_app_session',
   :secret      => '.... nums and chars .....'
 }

更新:我刚刚注意到会话cookie没有在我的生产环境中设置.因此,我猜测会话不能与CSRF值相关联.我想知道未设置的cookie是否与我的动态子域名有关?

最佳答案 确保您的服务器配置为具有正确的域名.当真实性令牌的cookie被设置为与服务器实际上不同的域时,我已经看到了这一点.客户不会意识到他们需要发送cookie.

另一种可能性是您的生产会话存储以某种方式被破坏.如果Rails无法找到用户的会话,则会因InvalidAuthenticityToken而失败.

点赞