2012-10-28 12 views
6

Chciałbym wiedzieć, którzy dostawcy zostali załadowani do użytku przez OmniAuth gem. Próbowałem to:Znajdź załadowanych dostawców dla OmniAuth

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

a to:

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

Odpowiedź Spodziewam (lub chce) jest [:Developer, :Twitter] jak w moim kodzie testowym mam załadowany tylko świergot jawnie, a dostarczony programista jest ładowany domyślnie.

(To wszystko jest tak inna biblioteka może załadować odpowiednie rzeczy do jego pracy, zależne od tego, co OmniAuth jest uruchomiony.)

Jeżeli istnieje sposób, i wiesz o tym, proszę dać mi znać. W przeciwnym razie będę pragmatyczny i wybiję OAuth z listy z pierwszego przykładu.

Ruby 1.9.3 i OmniAuth jest v1.1.1

Odpowiedz

6

OmniAuth :: Strategie wymienia strategie dostępne i zarejestrowane. Nie te, które są w "użyciu". Jeśli przekopiesz kod OmniAuth builder, zobaczysz, że różne strategie są przekazywane do Rack przy użyciu use jako oprogramowania pośredniego w bloku dostawcy, co sprawia, że ​​śledzenie strategii jest trudniejsze. Kolejne "pragmatyczne" podejście polega na instalowaniu programu OmniAuth Builder na małpach i śledzeniu dostawców.

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 

Dołącz tę poprawkę przed skonfigurowaniem dostawców. Po załadowaniu wszystkich dostawców, OmniAuth::Builder.providers da ci żądaną tablicę.

Mimo że strategia programisty jest dostępna, nie została załadowana. Jest ładowany tylko jeśli podasz

provider :developer 
+0

Dzięki za poświęcenie czasu, z tym, że to bardzo pomocne i bardzo doceniane. – iain

15

Dodawanie to tutaj dla użytkowników opracowania, jak potrzebowałam tej samej listy, jak Iain.

Próbowałem użyć zaakceptowanej odpowiedzi u góry mojego inicjatora devise w projekcie Rails, ale dostałem błąd (@@ nie określono dostawców).

Po patrząc do kodu źródłowego opracowania, użyłem następujących czynności, aby uzyskać tablicę symboli:

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

Możesz również użyć Devise.omniauth_providers –