Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails CSRF检测修复程序提供程序\u忽略\u状态:true成功设计Omniauth Facebook身份验证后不保存会话_Ruby On Rails_Facebook_Devise_Omniauth_Omniauth Facebook - Fatal编程技术网

Ruby on rails CSRF检测修复程序提供程序\u忽略\u状态:true成功设计Omniauth Facebook身份验证后不保存会话

Ruby on rails CSRF检测修复程序提供程序\u忽略\u状态:true成功设计Omniauth Facebook身份验证后不保存会话,ruby-on-rails,facebook,devise,omniauth,omniauth-facebook,Ruby On Rails,Facebook,Devise,Omniauth,Omniauth Facebook,我的应用程序运行正常,然后我更新到Rails 5.0.1。此后,我的应用程序不再通过Facebook验证,并在日志中出现以下错误: Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected 因此,根据StackOverflow上的人员的建议,我更改了omniauth配置,以包括provider\u ignores\u sta

我的应用程序运行正常,然后我更新到Rails 5.0.1。此后,我的应用程序不再通过Facebook验证,并在日志中出现以下错误:

Authentication failure! csrf_detected: 
OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected
因此,根据StackOverflow上的人员的建议,我更改了omniauth配置,以包括
provider\u ignores\u state:true
设置,从而抑制了该错误

config.omniauth :facebook, 'xxx', 'xxxxxxxxxxxxx',{
      scope: 'public_profile,email,user_birthday,etc...',
      info_fields: 'name,first_name,etc...',
      provider_ignores_state: true
  }
这使得一切都很顺利;至少在本地运行的开发中是这样,但当我将代码推送到我的登台服务器时,应用程序成功地通过Facebook进行身份验证,假定用户“登录”并重定向到
root\u path()
——然后身份验证失败并重定向回用户/sign\u-in

为了帮助诊断问题,我在相关调用上方放置了一条日志行(以查看是否正在执行该调用),例如:

我的Facebook提供商的OmniAuthCallbackController处理程序似乎达到了“登录和重定向”,但由于我无法在登台环境中确定的原因,它从未实际将会话保存到cookie中。日志中没有错误(在调试模式下)来证明抛出了任何类型的异常-除了增加用户的log_in_计数的查询实际上没有运行任何查询:

(2.4ms)  COMMIT
(0.2ms)  BEGIN
(0.2ms)  COMMIT
这看起来很奇怪(没有实际的更新查询,而在开发中我可以看到log\u in\u计数等会增加)。但这是表明出了问题的唯一其他迹象。之后,
验证用户失败检查并重定向回登录url


这让我发疯了-这是一个bug,还是有解决这个问题的方法?

我终于解决了这个问题,但我仍然不明白出了什么问题。基本上,创建了一个“空的”Rails 5项目,并使用omniauth facebook gem和我的主应用程序的设置设置设置了一个全新的装置-部署到一个临时服务器的克隆实例上,它成功了!大多数代码是相同的;但是,当我用新应用程序中的designe.rb初始值设定项替换designe.rb初始值设定项时,旧代码再次在stagingg服务器上运行。有趣的是,我将Omniauth配置从旧的应用程序改为新的应用程序,所以它一定是Desive的另一个模块出了问题……而不是Omniauth本身


不管是哪种情况,它现在都在工作。所以我会把它放在床上,把它留在这里,以防其他人遇到同样的问题;虽然我说不出具体的错误是什么,但这些是我用来调试/修复特定问题的步骤。

对于
omniauth github
,我们遇到了相同的错误。为我们修复它的(除了
provider\u-ignores\u-state:true
hack)是github认证站点链接中的URL。最初,我们为github OAuth输入了整个URL(
https://github.com/login/oauth/authorize?client_id=#{ENV[“GITHUB\u CLIENT\u ID”}&scope=repo
),但将其更改为omniauth格式just
/auth/GITHUB
,修复了此CSRF错误(以及我们尝试模拟/测试OAuth时未找到路由的错误)。把这个留在这里,以防将来有其他人有类似的问题

还有一些额外的上下文,像这样的gem可以通过GET完全禁用
/auth/github
端点。这个答案让我看到了正确的方向,但那颗宝石是我错过的关键!希望这能帮助其他任性的Omniauth旅行者。
(2.4ms)  COMMIT
(0.2ms)  BEGIN
(0.2ms)  COMMIT