Rails, Google OAuth и 2 разные области входа (Admin / Front) - PullRequest
0 голосов
/ 03 февраля 2019

Я использую гем omniauth-google-oauth2

В моем случае у меня есть 2 разные области действия:

  • AdminUsers
  • FrontUsers

Я хотел бы использовать Google Auth для обоих, но поскольку существует только один URL-адрес обратного вызова, я не знаю, как определить, идет ли эта аутентификация от FrontUser или и от AdminUser.

Я не могу использовать «имя» или «адрес электронной почты» в качестве идентификатора области, потому что одно и то же имя / адрес электронной почты могут быть в обеих областях.

Я попытался определить 2 различных URL-адреса обратного вызова и добавлениепараметр redirect_uri для первого URL-адреса аутентификации:

Для входа администратора:

<%= link_to "Login with Google", "/auth/google_oauth2?redirect_uri=http://example.com/admin/auth/google_oauth2/callback" %>

Для входа Front:

<%= link_to "Login with Google", "/auth/google_oauth2?redirect_uri=http://example.com/front/auth/google_oauth2/callback" %>

Работает почти идеально,проблема в том, что request.env['omniauth.auth'] пусто, как мы видели в других выпусках .

Я тоже пробовал это:

<%= link_to "Login with Google", "/auth/google_oauth2?callback_path=/admin/auth/google_oauth2/callback" %>

Но параметр callback_path просто игнорируется.

Если бы я только мог хотя бы отправить параметр флага, который был бы возвращен в обратном вызове, был быдостаточно.

Какое решение я могу реализовать?

1 Ответ

0 голосов
/ 03 февраля 2019

Я вижу, на самом деле, я могу отправить параметр, который возвращается в обратном вызове:

<%= link_to "Login with Google", "/auth/google_oauth2?from=admin" %>

И затем в действии контроллера обратного вызова я вижу его:

request.env['omniauth.params']['from']

Тогда я могу развить свою логику, основываясь на этом.

...