6

我想知道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

4

2 回答 2

17

在这里为 Devise 用户添加这个,因为我需要与 iain 相同的列表。

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

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

Devise.omniauth_configs.keys # => [:facebook, :twitter]
于 2013-09-14T12:35:29.287 回答
6

OmniAuth::Strategies 列出可用和注册的策略。不是那些正在“使用”的。如果您深入研究OmniAuth builder的代码,您会发现各种策略都使用useprovider 块中的中间件传递到 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
于 2012-10-28T22:53:04.527 回答