Rails,Google OAuth和2个不同的登录范围(管理员/前端)

时间:2019-02-03 11:32:29

标签: ruby-on-rails google-oauth2

我正在使用宝石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']是空的,就像我们在其他issues中看到的那样。

我也尝试过:

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

但是参数callback_path只是被忽略。

如果我至少可以发送一个在回调中返回的flag参数就足够了。

我可以实施什么解决方案?

1 个答案:

答案 0 :(得分:0)

事实上,我可以发送在回调函数中返回的参数:

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

然后在回调控制器操作中,我可以看到它:

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

然后我可以基于此派生我的逻辑。