Поддерживаете github.com и github enterprise в логинах Devise? - PullRequest
0 голосов
/ 08 мая 2018

Я создаю приложение Rails, которое обычно аутентифицируется в локальной установке Github Enterprise при входе в систему. Я бы хотел, чтобы вошедшие в систему пользователи могли связать свой github.com ID со своей учетной записью в моем приложении, но изо всех сил пытаются выяснить, как это сделать.

В частности, проблема в том, что оба метода аутентификации будут использовать стратегию аутентификации github в настройке omniauth. Однако соответствующие OAUTH URL-адреса, а также мой внутренний контроллер обратного вызова должны быть разными для каждого случая (в одном случае я действительно хочу выполнить вход в систему, в другом случае я просто хочу добавить больше информации к current_user). К сожалению, насколько я могу судить, я могу настроить стратегию github только один раз, но мне нужно настроить две разные конфигурации для двух разных провайдеров.

Я уже некоторое время ищу в документации Devise и Omniauth, но безуспешно. Я лаю совсем не здесь? Если нет, может кто-нибудь указать мне правильное направление, пожалуйста?

Большое спасибо,

Штеффен

1 Ответ

0 голосов
/ 16 мая 2018

После некоторого поиска источников 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.

...