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'
}
我有 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'
}