#939·omniauth

通过 :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 的类属性,因此要通过名称查找策略,我必须创建实例:

rb
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