![](/img/trans.png)
[英]422 and Can't verify CSRF token authenticity on Rails and Devise
[英]Rails app on AWS Elastic Beanstalk returning 422 with “Can't verify csrf token”
我有一个使用Puma和nginx的Rails 5.1.4应用程序,该应用程序已经在Elastic Beanstalk(AWS)的生产中运行了一段时间。 我最近在同一个地方打开了一个新的质量检查环境,并通过消息“无法验证csrf令牌”对HTML调用(API调用工作正常)的POST请求不断收到422错误。 每个配置值都相同或相等。
我添加了必要的标签并检查了真实性令牌值。 在<head>
标记下,我有:
<meta name="csrf-param" content="authenticity_token">
<meta name="csrf-token" content="acYjbDMNDXsw+mHN7pM/4XldHungS9kDlkkTT1moNQaf1y7wRhLJhOVb7GTMDieLU4kGc7yWlOch4DlG/z/A8g==">
在我的登录表单上,我具有以下内容:
<input type="hidden" name="authenticity_token" value="acYjbDMNDXsw+mHN7pM/4XldHungS9kDlkkTT1moNQaf1y7wRhLJhOVb7GTMDieLU4kGc7yWlOch4DlG/z/A8g==">
在日志中,我收到参数:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"acYjbDMNDXsw+mHN7pM/4XldHungS9kDlkkTT1moNQaf1y7wRhLJhOVb7GTMDieLU4kGc7yWlOch4DlG/z/A8g==", "user"=>{"email"=>"someemail@mail.com", "password"=>"[FILTERED]", "remember_me"=>"1"}}
我也有rack-cors
gem和以下配置:
config.middleware.insert_before 0, Rack::Cors do
allow do
origins '*'
resource '*', headers: :any, methods: [:get, :post, :options]
end
end
我已经尝试解决这一问题了几天,但我对如何继续工作一无所知,关于可能导致此问题的任何想法? 还有其他可能对解决问题有用的信息吗?
我的第一个猜测将是涉及一些HTML缓存,因为令牌有所不同。 在Rails后端上运行Varnish时,我已经看到类似的行为,您是否有Rack :: Cache或Nginx的代理缓存之类的东西?
因此,以防万一将来对某人有帮助,我设法解决了这个问题,尽管没有完全解决。 在我的nginx配置中,我有这行:
server_name *.myappdomain.com;
myappdomain是我的生产域。 我试图使用我的elasticbeanstalk网址登录,该网址类似于http://myapp-stage.region.elasticbeanstalk.com
。 我在路由53上的DNS中添加了一个条目,将别名stage.myappdomain.com
到了弹性beantalk URL中,它可以正常工作。 我怀疑使用nginx配置多玩一点也会解决这个问题。
发生这种情况的另一个原因:如果nginx使用纯http连接到rails服务器,则默认情况下,nginx将不允许Rails访问cookie(如果它们被标记为安全)(应该是安全的)。 有多种方法可以配置NGINX以使它们通过-可以在Unix和Linux上找到很好的总结
(请注意,这可能不是唯一可能发生的情况,因此请尽可能检查堆栈每一层的配置)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.