2012-10-28 9 views
6

OmniAuth gemで使用するためにどのプロバイダーがロードされているか知っていますか?OmniAuthのロードされたプロバイダーを検索します。

OmniAuth::Strategies.constants # a method provided by the standard lib Module class 
# => [:Developer, :OAuth, :Twitter] 

と、この:

OmniAuth.strategies.inspect # a method provided by the OmniAuth class, but which has no documentation or comments around it. 
# => [OmniAuth::Strategies::OAuth] 

私は期待して(またはしたい)と思い答え私は明示的にツイッターをロードした私のテストコードのように[:Developer, :Twitter]であり、私はこれを試してみました既定では、提供される開発者が読み込まれます。

(これはすべてのように異なるライブラリがOmniAuthが実行されているものに依存して、それを動作させるための正しいものを読み込むことができます。)

が道であり、あなたがそれを知っている場合は、私に知らせてください。さもなければ、私は実用的になり、最初の例のリストからOAuthをノックアウトします。

Rubyは1.9.3で、OmniAuthは1.1.1

答えて

6

OmniAuthです::戦略が利用可能であり、登録済みの戦略を示しています。 「使用中」のものではありません。 OmniAuth builderのコードを調べると、プロバイダブロックのミドルウェアとしてuseを使用してさまざまな戦略がRackに渡され、戦略をより正確に追跡できます。もう一つの「実用的な」方法は、MonkeyパッチOmniAuth Builderを使用してプロバイダを追跡することです。

module OmniAuth 
    class Builder < ::Rack::Builder 
    def provider_patch(klass, *args, &block) 
     @@providers ||= [] 
     @@providers << klass 
     old_provider(klass, *args, &block) 
    end 
    alias old_provider provider 
    alias provider provider_patch 
    class << self 
     def providers 
     @@providers 
     end 
    end 
    end 
end 

プロバイダを設定する前に、このパッチを添付してください。すべてのプロバイダがロードされたら、OmniAuth::Builder.providersはあなたに必要な配列を与えます。

デベロッパー戦略が利用可能でも、ロードされません。指定した場合のみロードされます。

provider :developer 
+0

おかげで、当然の非常に有用と多くのです。 – iain

15

これをここに追加すると、iainと同じリストが必要になります。

私は、Railsプロジェクトの私のdevise初期設定の先頭にある回答を使用してみましたが、エラーが発生しました(@@ providersが定義されていません)。

考案のソースコードに見た後、私はシンボルの配列を取得するには、以下の使用:これで時間を割いて

Devise.omniauth_configs.keys # => [:facebook, :twitter] 
+6

Devise.omniauth_providersも使用できます –

関連する問題