Devise/Omniauth失败:如何调试?

Hap*_*per 12 ruby ruby-on-rails devise omniauth

在尝试"使用Google登录"后,我在日志中看到此错误:

Processing by Users::OmniauthCallbacksController#failure as HTML
Run Code Online (Sandbox Code Playgroud)

我可以通过URL(在日志中)看到谷歌发送的所有数据,包括用户电子邮件和姓名.那怎么可能出错?我的回调甚至没有被执行.我只能被重定向到我网站的sign_in页面.

而且我很确定一切都配置正确,因为这在几周前工作正常.我认为我没有改变任何东西.Facebook登录仍然正常.

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

UPDATE

我向控制器添加了"故障"方法

def failure
  render :text => params.inspect
end
Run Code Online (Sandbox Code Playgroud)

哪个停止了重定向,并打印出来:

{}
Run Code Online (Sandbox Code Playgroud)

网址是这样的:

/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
Run Code Online (Sandbox Code Playgroud)

所以我需要的所有数据都在URL中,但是设计/ omniauth没有抓住它(显然这就是为什么它调用'failure'方法而不是我的回调).我不知道它是否可以通过'params'数组访问,或者是什么.

我对这个?_method=post部分也很感兴趣,因为对我网站的所有请求都是GET请求.也许这只是意味着omniauth对谷歌的请求是POST.

有什么想法吗?

Chr*_*erJ 9

要回答关于如何调试Omniauth的原始问题,以下是如何为Omniauth启用日志记录.config/initializers/devise.rb在定义Omniauth策略后立即添加此行:

OmniAuth.config.logger = Rails.logger if Rails.env.development?
Run Code Online (Sandbox Code Playgroud)

(如果您没有使用Devise,只需要Omniauth,那么请添加代码config/initializers/omniauth.rb)

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


joh*_*ley -2

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

我不太确定在这种特定情况下问题是什么,但如果您想深入挖掘代码,请安装 pry-debug gem。它为您提供带有步骤和下一个调试命令的撬动界面。添加pry.binding您的代码,它将停止在服务器中执行并调出窥探界面。例如:

def failure
  binding.pry
  render :text => params.inspect
end
Run Code Online (Sandbox Code Playgroud)

  • 您还应该让人们知道他们需要安装 pry gem 才能工作 https://github.com/pry/pry (2认同)