После некоторого поиска источников devise
я нашел достаточно простое решение. Основная проблема заключается в том, как заставить devise
использовать одну и ту же стратегию omniauth
дважды, но с разными URL-адресами API и обратного вызова. Поэтому нам нужно зарегистрировать два экземпляра 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.