我想知道哪些提供商已加载供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
答案 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