通过 :name 找到 OmniAuth 策略的最佳方式是什么?
作者: aguynamedben创建于 2018年8月10日更新于 2024年3月15日
我想动态查找特定的 OmniAuth 策略,通过它的 :name。例如,Google 策略的名称是 'google_oauth2' (代码)。OmniAuth.strategies 是一个包含类的列表:
[
[ 0] OmniAuth::Strategies::OAuth2 < Object,
[ 1] OmniAuth::Strategies::Asana < OmniAuth::Strategies::OAuth2,
[ 2] OmniAuth::Strategies::Bitbucket < OmniAuth::Strategies::OAuth2,
...
] 似乎没有 :name 的类属性,因此要通过名称查找策略,我必须创建实例:
strategy_klass = OmniAuth.strategies.find do |klass|
instance = klass.new(nil)
instance.name == 'google_oauth2'
end
# strategy_klass 现在是 OmniAuth::Strategies::GoogleOauth2 < OmniAuth::Strategies::OAuth2内容来源: omniauth/omniauth