2012-02-10 6 views
3

Ruby on RailsアプリケーションでOmniAuthから発生したOAuth :: Unauthorized例外をどのように救済できますか?Ruby on RailsアプリケーションでOAuth :: Unauthorized例外を救う方法は?

は明らかにこれのみ:Railsの内部でスローされた例外をキャッチし、この例外は、ラック・チェーンのどこかにスローされるよう

rescue_from OAuth::Unauthorized, :with => :unauthorized 

は動作しません。

このアプリケーションでは、管理者(そして開発者ではなく)がTwitterやFacebookの認証情報を設定しているため、間違ったものが起こり、実際に起こることがあります。それが起こったときに、「何かが間違っている」というより良いメッセージを示したいと思います。

更新:私もasked on the omniauth google groupは、これまでのところ答えはありませんが、あなたがこの質問を読んでいる場合は、それをチェックアウトする場合があります。

+0

から継承するミドルウェアを上書きして使用することができます。https://github.com/intridea/omniauth/issues/617 – Pablo

答えて

2

OmniAuthはRack Middlewareから動作します。したがって、rescue_fromは、ActionController経由でOmniAuthを超える抽象レベルであるため、影響を受けません。

このエラーは、通常、OAuth設定が誤って設定されているために発生します。基本的には、アプリケーションの認証が許可されておらず、ユーザーの認証が失敗したというわけではありません。

構成エラーは、開発者が軽減したいと思うものです。そのため、このような例外を救済する理由がわかりません。

あなたは絶対にこの例外を救出しなければならない場合は、これはバグかもしれませんOmniAuth

module OmniAuth 
    module Strategies 
    class FacebookWithExceptionHandling < OmniAuth::Strategies::Facebook 
     def call 
     begin 
      super 
     raise OmniAuth::Unauthorized => e 
      #handle appropriately in rack context here 
     end 
     end 
    end 
    end 
end 

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider OmniAuth::Strategies::FacebookWithExceptionHandling, 
    api_key, #your api key 
    secret_key, #your secret key 
end 
+0

ユーザーは、TwitterやFacebookのためのトークンとキーを設定しています。私は彼らが間違った情報を入れてしまうことを避けるために何もできません。これを説明するために質問を更新します。 – Pablo

+0

OKです。 OmniAuthはラックミドルウェアなので、ラッククラスをオーバーライドできます。私は上記の私の応答を更新します – danpickett

関連する問題