2

ユーザーがFacebookでログインしたり、ユーザー名とパスワードで通常のアカウントを作成したりできるようにするために、DeviseでOmniAuthを使用しています。最初にすべてをセットアップしたとき、Railscastsの優れた指示を使用しました。すべてが 2 か月以上にわたって非常にうまく機能していましたが、つい先日、Facebook のログインが機能しなくなりました。OmniAuth は facebook での認証にあなたを送ってから、次のように返します。http://localhost:3000/auth/failure?message=invalid_response

Google には、このエラーの原因や修正方法に関する提案はなく、OmniAuth のドキュメントにもありません。私も彼らのコードを掘り下げてみましたが、私が見つけたこのエラーの唯一の言及はこれです/oa-oauth/lib/omniauth/strategies/oauth.rb:

rescue ::MultiJson::DecodeError => e
  fail!(:invalid_response, e)
end

誰もこのエラーを見たことがありますか!? それが何であるか、またはそれを修正する方法を知っていますか?! これにより、このアプリケーションを起動できなくなっているため、何か助けていただければ幸いです。

ありがとう、JG

4

5 に答える 5

3

同じ状況でこのエラーに遭遇しました。Devise は無関係な例外をレスキューし、認証の失敗として処理しています。コントローラーで例外を処理することで、Devise をプリエンプトしました。

  # authentications_controller.rb
  def create
    omniauth = request.env["omniauth.auth"]
    # Blah
    # blah
    # Blark!
  rescue Exception => e
    # Just spit out the error message and a backtrace.
    render :text => "<html><body><pre>" + e.to_s + "</pre><hr /><pre>" + e.backtrace.join("\n") + "</pre></body></html>"
于 2011-05-02T05:44:52.810 に答える
2

Google 経由でこれを見つけた他の人にとっては、heroku_backup_task が原因でした。それを gemfile に追加すると、OmniAuth のデコードが失敗し、このエラーが発生します。jsonの競合だと思います。

1.9.2 で発生しない理由はわかりませんが、1.9.2 にアップグレードすると修正されることは確認できますが、すべての gem が正常に動作せず、heroku をダウングレードすると、アプリで他の問題が発生する可能性があります。ノーゴー。問題を発見したので、アプリを破棄して再作成する必要があります。

于 2011-04-07T04:51:53.227 に答える
1

Ok、

なぜこれがうまくいったのかはわかりませんが、うまくいったので、この問題に遭遇した他の誰かを助けるためにここに投稿します.

Ruby 1.9.2 (未来への道!) を使用するようにアプリをアップグレードしたところ、再び機能しました。理由はわかりませんが、時々それがうまくいくことがあります。

しかし、アップグレードは本当に簡単でした。私はこのdhh ツイートによってアップグレード アクションに火がつき、1.8.7 コードが 1.9.2 で動作することを確認するのにこれこれが本当に役立つリソースであることがわかりました。アプリのアップグレードを非常に簡単にするためのherokuへの小道具。

于 2011-04-04T06:44:38.420 に答える
1

私は同じ問題を抱えていましたが、解決策を見つけたと思います。チュートリアルでは、RailsCast #235でauthentications_controller.rb が提供されます。

def create
  auth = request.env["rack.auth"]
  current_user.authentications.find_or_create_by_provider_and_uid(auth['provider'],
                                                                  auth['uid'])
  flash[:notice] = "Authentication successful."
  redirect_to authentications_url
end

しかし、

auth = request.env["rack.auth"]

omn​​iouth 0.2.3 にはもう存在しません

auth = request.env["omniauth.auth"]

正しい。

于 2011-04-21T18:25:25.180 に答える
1

OK、そのような古い質問に投稿して申し訳ありませんが、これについてRailscastsのチュートリアルに従っていると、同じエラーが発生しました。私は、omniauth-twitter gem のエラー処理が根本的なエラーを隠しているため、混乱を引き起こしているという結論に達しました。omn​​iauth-facebook gem をアプリに追加し、これで認証することで問題を解決しました。

これにより、アプリの根本的なエラーがすぐに明らかになりました。これは、モデルではなくユーザーコントローラーに User.create_with_omniauth メソッドを配置したことでした。これは初心者向けのエラーですが、簡単に解決できます。

私のエラーは簡単で、やや無関係でしたが、Facebook gem を使用することで、エラー処理により問題を理解し、迅速に解決することができました。この問題に苦しんでいる場合は、facebook または別のプロバイダーを試して、より簡単に根本的な問題に到達できるかどうかを確認し、Ruby へのアップグレードなどのより複雑な問題を確実に回避してください!

于 2011-12-20T21:38:20.407 に答える