13

「Google でログイン」しようとすると、ログに次のエラーが表示されます。

Processing by Users::OmniauthCallbacksController#failure as HTML

ユーザーのメールアドレスや名前など、Google からのすべてのデータが URL 経由で (ログに) 送信されていることがわかります。では、何がうまくいかないのでしょうか?私のコールバックは実行されていません。サイトの sign_in ページにのみリダイレクトされます。

これは数週間前に正常に機能していたため、すべてが正しく構成されていると確信しています。私は何も変わっていないと思います。Facebook のログインは引き続き正常に機能します。

この失敗をデバッグする方法についてのアイデアはありますか? ログには、パラメーターと値でいっぱいの長い URL 以外には何もありません。INFO メッセージのみ。上に投稿されたものは、失敗について何かを言った唯一のものです。

アップデート

コントローラーに「失敗」メソッドを追加しました

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 にありますが、devise/omniauth はそれを取得していません (それが、コールバックの代わりに「失敗」メソッドを呼び出しているようです)。「params」配列を介してアクセスできるようにする必要があるかどうかはわかりません。

?_method=post私のサイトへのリクエストはすべて GET リクエストであるため、この部分にも興味があります。おそらく、omniauth から Google に対して行われたリクエストが POST だったことを意味しているにすぎません。

何かご意見は?

4

4 に答える 4

13

Omniauth のデバッグ方法に関する元の質問に答えるために、Omniauth のログを有効にする方法を次に示します。config/initializers/devise.rbOmniauth 戦略を定義した直後に、次の行を追加します。

OmniAuth.config.logger = Rails.logger if Rails.env.development?

(Devise を使用しておらず、Omniauth のみを使用している場合は、代わりにコードを に追加してくださいconfig/initializers/omniauth.rb)

コールバック フェーズからの完全な応答を含む、Omniauth からのより多くの情報がログ ファイルに読み込まれます。

于 2016-06-22T08:16:01.087 に答える
0

最近宝石をアップグレードしましたか?もしそうなら、omniauth と devise のバージョンを以前の gem のバージョンと比較すると役立つかもしれません。また、変更された omniauth/devise 依存関係である可能性もあります。

この特定のケースで何が問題なのか正確にはわかりませんが、コードを深く掘り下げたい場合は、pry-debug gem をインストールしてください。ステップおよび次のデバッグ コマンドを使用して、こじ開けインターフェイスを提供します。コードを追加pry.bindingすると、サーバーでの実行が停止し、pry インターフェイスが表示されます。例えば:

def failure
  binding.pry
  render :text => params.inspect
end
于 2012-07-03T04:08:55.337 に答える