Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.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 Desive/Omniauth失败:如何调试?_Ruby On Rails_Ruby_Devise_Omniauth - Fatal编程技术网

Ruby on rails Desive/Omniauth失败:如何调试?

Ruby on rails Desive/Omniauth失败:如何调试?,ruby-on-rails,ruby,devise,omniauth,Ruby On Rails,Ruby,Devise,Omniauth,在尝试“使用谷歌登录”后,我在日志中看到以下错误: Processing by Users::OmniauthCallbacksController#failure as HTML 我可以通过URL(在日志中)看到google发送的所有数据,包括用户电子邮件和姓名。那么会出什么问题呢?我的回调甚至没有被执行。我只会被重定向到我网站的登录页面 我很确定所有的配置都是正确的,因为几周前它还可以正常工作。我想我没有改变什么。Facebook登录仍然可以正常工作 有没有关于如何调试此故障的想法?除了那

在尝试“使用谷歌登录”后,我在日志中看到以下错误:

Processing by Users::OmniauthCallbacksController#failure as HTML
我可以通过URL(在日志中)看到google发送的所有数据,包括用户电子邮件和姓名。那么会出什么问题呢?我的回调甚至没有被执行。我只会被重定向到我网站的登录页面

我很确定所有的配置都是正确的,因为几周前它还可以正常工作。我想我没有改变什么。Facebook登录仍然可以正常工作

有没有关于如何调试此故障的想法?除了那些充满参数和值的长URL之外,日志中没有其他内容。只有信息消息。上面贴的是唯一一个提到失败的人

更新

我向控制器添加了一个“失败”方法

def failure
  render :text => params.inspect
end
它停止了重定向,并打印了以下内容:

{}
url是这样的:

/users/auth/google/callback?_method=post&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.mode=id_res&openid.op_endpoint=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fud&openid.response_nonce=2012-04-16T12%3A25%3A49Z_v1fNngSQJaHBQ&openid.return_to=http%3A%2F%2Fdev.myapp.me%3A3000%2Fusers%2Fauth%2Fgoogle%2Fcallback%3F_method%3Dpost&openid.assoc_handle=AMlYA9Urw_lYamPphTSdQ9a6DU0Ez0y5RaDDM78qPL7Xgm77nMpJiB85&openid.signed=op_endpoint%2Cclaimed_id%2Cidentity%2Creturn_to%2Cresponse_nonce%2Cassoc_handle%2Cns.ext1%2Cext1.mode%2Cext1.type.ext5%2Cext1.value.ext5%2Cext1.type.ext8%2Cext1.value.ext8%2Cext1.type.ext2%2Cext1.value.ext2&openid.sig=2FPjo7U1e%2Fde248XpUgjQLduNAM%3D&openid.identity=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid%3Fid%3DAItOawk1F5U6x_-kJnydjoww5haU41tquh1Zl2c&openid.claimed_id=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid%3Fid%3DAItOawk1F5U6x_-kJnydjoww5haU41tquh1Zl2c&openid.ns.ext1=http%3A%2F%2Fopenid.net%2Fsrv%2Fax%2F1.0&openid.ext1.mode=fetch_response&openid.ext1.type.ext5=http%3A%2F%2Faxschema.org%2FnamePerson%2Ffirst&openid.ext1.value.ext5=Some_User&openid.ext1.type.ext8=http%3A%2F%2Faxschema.org%2Fcontact%2Femail&openid.ext1.value.ext8=some_email%40gmail.com&openid.ext1.type.ext2=http%3A%2F%2Faxschema.org%2FnamePerson%2Flast&openid.ext1.value.ext2=Some_User
所以问题是,我需要的所有数据都在URL中,但Desive/omniauth没有抓取它(显然这就是为什么它调用“failure”方法而不是我的回调)。我不知道它是否应该通过“params”数组访问,或者什么

我对
?\u method=post
部分也很感兴趣,因为对我的站点的所有请求都是GET请求。也许这只是意味着omniauth向google发出的请求是POST


有什么想法吗?

你最近升级了你的宝石吗?如果是这样,将omniauth和Desive版本与以前的gem版本进行比较可能会很有用。它也可能是一个omniauth/Desive依赖项,它发生了变化

我不确定在这种特定情况下问题是什么,但是如果您想深入挖掘代码,那么就安装pry debug gem。它为您提供了带有step和next调试命令的pry接口。在您的代码中添加
pry.binding
,它将停止服务器中的执行并打开pry界面。例如:

def failure
  binding.pry
  render :text => params.inspect
end

我知道这是一个老问题,但我有同样的问题,我在网上没有发现任何帮助。事实证明,这个问题是由我如何使用Puma(瘦带来的实践)引起的。我在同一台机器(Apache反向代理)上启动了多个Puma进程,从Github的回调似乎要转到与原始身份验证请求不同的Puma进程我将Puma进程减少到一个,但没有再次出现这种情况(切换到使用Puma workers:
Puma-W5
,后者反过来使用Puma管理的进程,而不是Apache循环)。这也是为什么我在开发中从未遇到过这个问题,因为我没有在那个环境中运行一组进程

我意识到这是一个古老的问题,最初提出这个问题的人要么解决了它,要么转向其他解决方案,然而,我遇到了同样的问题,我对解决方案的追求让我来到了这里

我设法解决了它,所以这里是为下一个人寻找它

结果证明这是微不足道的。这就是我所拥有的:

# config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :github, ENV['github_key'], ENV['github_secret']
end

# config/initializers/devise.rb
Devise.setup do |config|
  # ... devise config not related to omniauth ...
  config.omniauth :github, ENV['github_key'], ENV['github_secret']
end
因此,我在两个地方配置omniauth提供程序,结果是冲突的

在我从omniauth.rb中删除配置后,从github到
/auth/github/callback
的重定向请求开始由
用户::omniauthcallbackcontroller#github
处理,而不是像更改之前那样的
#失败


如此愚蠢的错误和如此少的信息需要处理…

要回答关于如何调试Omniauth的原始问题,下面是如何为Omniauth启用日志记录。在定义Omniauth策略之后,将此行添加到
config/initializers/designe.rb

OmniAuth.config.logger = Rails.logger if Rails.env.development?
(如果您没有使用designe,只需Omniauth,然后将代码添加到
config/initializers/Omniauth.rb


您将在日志文件中从Omniauth获得更多信息,包括回调阶段的完整响应。

如果我们希望从回调阶段获得完整响应(包括标题),您还应该让人们知道,他们需要安装pry gem才能工作,我们还可以通过添加以下env变量来激活
ouath2
gem中的调试
OAUTH\u DEBUG=true