查找OmniAuth的已加载提供程序

时间:2012-10-28 19:56:18

标签: ruby omniauth

我想知道哪些提供商已加载供OmniAuth gem使用。我试过这个:

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],因为在我的测试代码中我只是明确地加载了twitter,默认情况下会加载提供的开发人员。

(这就是所以不同的库可以为它加载正确的东西,取决于OmniAuth的运行情况。)

如果有办法知道,请告诉我。否则我将是务实的,并从第一个例子中将OAuth从列表中删除。

Ruby是1.9.3,OmniAuth是v1.1.1

2 个答案:

答案 0 :(得分:15)

此处为Devise用户添加此内容,因为我需要与iain相同的列表。

我尝试在Rails项目中使用我的设计初始化程序顶部接受的答案,但是我收到了错误(@@ providers未定义)。

在查看Devise源代码之后,我使用以下内容来获取符号数组:

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

答案 1 :(得分:6)

OmniAuth :: Strategies列出了可用和已注册的策略。不是那些“使用”的。如果您仔细研究OmniAuth builder的代码,您将看到使用use作为提供程序块中的中间件将各种策略传递到Rack上,这使得跟踪策略更加困难。另一种“实用”方法是对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