在Devise登录中支持github.com和github企业?

时间:2018-05-08 16:02:44

标签: ruby-on-rails devise omniauth

我正在构建一个Rails应用程序,该应用程序通常在登录用户时针对本地Github Enterprise安装进行身份验证。我想让登录用户将他们的github.com ID与我的应用程序中的帐户相关联,但很难弄清楚如何执行此操作。

具体来说,问题是两种身份验证方法都会在github设置中使用omniauth身份验证策略。但是,相关的OAUTH网址以及我的内部回调控制器需要针对每种情况都有所不同(在一种情况下,我实际上想要登录,在另一种情况下,我只是想添加更多信息到current_user)。不幸的是,据我所知,我只能配置一次github策略,但我需要为两个不同的提供商设置两种不同的配置。

我一直在搜索Devise和Omniauth文档一段时间,但没有成功。我在这里完全叫错了树吗?如果没有,有人可以指出我正确的方向吗?

非常感谢,

斯特芬

1 个答案:

答案 0 :(得分:0)

在对devise来源进行一些挖掘之后,我找到了一个相当简单的解决方案。问题的核心是如何让devise两次使用相同的omniauth策略,但使用不同的API和回调网址。因此,我们需要在两个不同的提供商ID 名称下注册两个omniauth-github实例。要使其工作,您需要在第二个实例中显式提供策略类名称。所以,你们总能得到这样的东西:

# Github Enterprise login through standard github provider
config.omniauth :github,
                Rails.configuration.ghe_oauth_id,
                Rails.configuration.ghe_oauth_secret,
                client_options: {
                  site: 'https://github-enterprise/api/v3',
                  authorize_url: 'https://github-enterprise/login/oauth/authorize',
                  token_url: 'https://github-enterprise/login/oauth/access_token'
                },
                scope: 'user repo'

# Github.com support using the same strategy, but with a different provider ID and name
config.omniauth :github_com,
                Rails.configuration.github_com_oauth_id,
                Rails.configuration.github_com_oauth_secret,
                strategy_class: OmniAuth::Strategies::GitHub,
                name: :github_com,
                scope: 'user repo'

路由设置与单个omniauth提供程序保持一致。在我的devise回调的回调控制器中,我现在有一个方法github用于通过Github Enterprise处理身份验证,一个github_com用于github.com身份验证。