我想知道OmniAuth gem使用了哪些提供程序.我试过这个:
OmniAuth::Strategies.constants # a method provided by the standard lib Module class
# => [:Developer, :OAuth, :Twitter]
Run Code Online (Sandbox Code Playgroud)
还有这个:
OmniAuth.strategies.inspect # a method provided by the OmniAuth class, but which has no documentation or comments around it.
# => [OmniAuth::Strategies::OAuth]
Run Code Online (Sandbox Code Playgroud)
我期望(或想要)的答案[:Developer, :Twitter]就像我的测试代码一样,我只是明确地加载了twitter,默认情况下加载了开发人员.
(这就是所有不同的库可以加载正确的东西使它工作,取决于OmniAuth运行的是什么.)
如果有办法让你知道,请告诉我.否则我将是务实的,并从第一个例子中将OAuth从列表中删除.
Ruby是1.9.3,OmniAuth是v1.1.1
小智 16
在这里为Devise用户添加这个,因为我需要与iain相同的列表.
我尝试在Rails项目中使用我的设计初始化程序顶部接受的答案,但是我收到了一个错误(@@ providers未定义).
在查看Devise源代码之后,我使用以下内容来获取符号数组:
Devise.omniauth_configs.keys # => [:facebook, :twitter]
Run Code Online (Sandbox Code Playgroud)
小智 6
OmniAuth :: Strategies列出了可用和已注册的策略.不是那些"使用"的.如果您仔细查看OmniAuth构建器的代码,您将看到使用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
Run Code Online (Sandbox Code Playgroud)
在配置提供程序之前包括此修补程序.一旦加载了所有提供程序,OmniAuth::Builder.providers就会为您提供所需的数组.
即使开发人员策略可用,也不会加载.只有在您指定时才会加载它
provider :developer
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2035 次 |
| 最近记录: |