Django Social Auth:Google OAuth2 - 仅显示来自受限域列表的电子邮件

Django Social Auth: Google OAuth2 - only display emails from restricted domain list

我有 Django Social Auth(pypi 包 social-auth-app-django)在网站上使用 Google OAuth2。

当他们打开一个页面时,他们会被重定向到 Google 的 OAuth2 身份验证。这很好用,如果他们尝试使用不在我的限制列表中的电子邮件地址登录,他们会收到 AuthForbidden 异常。我为此添加了一个陷阱,并向他们展示了一个不允许他们登录该站点的页面。到目前为止一切都很好。

但是,我首先不希望在 Google 的身份验证页面的列表中显示无效的电子邮件帐户。在将 javascript 与参数一起使用之前,我已经通过手动调用身份验证页面来完成此操作,但我不确定如何使用固定的 Django 社交身份验证模块来执行此操作。

这可以做到吗?如果可以,怎么做?

我有一个中间件可以检测用户是否未登录,returns 一个 login() 视图可以将他们重定向到 Google 身份验证页面。

views.py

# Login using OAuth2.
@csrf_protect
def login(request):
    next_page = request.path
    if next_page is None or next_page == '':
        next_page = request.POST.get('next', request.GET.get('next', ''))

    # Check if they are already logged in and redirect them to the original page if so.
    if hasattr(request, 'user') and request.user.is_authenticated:
        return HttpResponseRedirect(next_page)

    # Otherwise, send them to the OAuth2 page with the request url as the next parameter.
    else:
        return HttpResponseRedirect('/soc/login/google-oauth2?next=' + next_page + '&hd=mydomain.com')

编辑 - 添加图片以阐明我的目的...

我要的是当 Google OAuth2 对话框弹出询问 select 用于登录或添加新地址的电子邮件地址时,只有电子邮件来自受限制的域显示为选项。此图像显示了 Google 登录名和两个先前已通过身份验证的帐户。一个是我不想在这里显示的个人 gmail 帐户。另一个来自白名单中的域,也是我想在此处显示的唯一域:

对于 Google,您可以通过定义设置来限制列出的帐户到给定域:

SOCIAL_AUTH_GOOGLE_OAUTH2_AUTH_EXTRA_ARGUMENTS = {
    'hd': 'yourdomain.com'
}