Использование Omniauth как для входа в Devise, так и для доступа к API - PullRequest
0 голосов
/ 09 января 2020

В нашем приложении мы позволяем пользователю получать доступ к своим данным у различных поставщиков (Календарь Google, Microsoft Outlook, временная шкала Facebook и т. Д. c.) Через доступные API, используя Omniauth. Для этого у нас есть omniauth.rb со всеми необходимыми конфигами, такими как:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'], scope: 'email,user_posts,user_status,public_profile,manage_pages,instagram_basic'
  provider :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET'],
          name: 'google', 
          scope: 'email, profile, calendar.readonly',
          access_type: 'offline', 
          prompt: 'select_account consent'
  # etc...
end

Теперь мы хотели бы добавить логин с Google в качестве альтернативного способа входа в систему. Так как мы используем Devise для управления пользовательскими сессиями Мы хотели бы использовать возможности Omniauth Devise для реализации входа в систему с поставщиком OAuth, таким как Google. Однако, как только мы сделаем нашу модель «омниатируемой», существующая функциональность Omniauth перестает работать, выдавая No route matches [GET] "/auth/facebook" при попытке добавить учетную запись oauth для доступа к API.

Как правильно сочетать использование Omniauth в Devise и в нашем простом ванильном потоке OAuth?

1 Ответ

0 голосов
/ 10 января 2020

Я нашел ответ сам: дело не в том, чтобы использовать тонкую оболочку функциональности, которую Devise добавляет в OmniAuth, а в том, чтобы позаботиться о маршрутизации OmniAuth самостоятельно. Я описал этот подход здесь, в Devise Wiki .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...