Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Social Auth:Google OAuth2-仅显示来自受限域列表的电子邮件_Django_Python Social Auth_Django Socialauth - Fatal编程技术网

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

Django Social Auth:Google OAuth2-仅显示来自受限域列表的电子邮件,django,python-social-auth,django-socialauth,Django,Python Social Auth,Django Socialauth,我让Django Social Auth(pypi软件包Social Auth应用程序Django)在一个网站上与Google OAuth2合作 当他们打开一个页面时,他们会被重定向到谷歌的OAuth2认证。这非常有效,如果他们尝试使用不在我的限制列表中的电子邮件地址登录,他们会收到一个AuthForbidden异常。我为此添加了一个陷阱,并向他们显示了一个不允许他们登录此站点的页面。到目前为止一切都很好 不过,我还是不希望在谷歌认证页面的列表中出现无效的电子邮件帐户。在使用带有参数的javas

我让Django Social Auth(pypi软件包Social Auth应用程序Django)在一个网站上与Google OAuth2合作

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

不过,我还是不希望在谷歌认证页面的列表中出现无效的电子邮件帐户。在使用带有参数的javascript之前,我已经通过手动调用身份验证页面完成了这项工作,但我不确定如何使用罐装的Django social auth模块完成这项工作

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

我有一个中间件,可以检测用户是否未登录,并返回一个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对话框弹出时,要求选择用于登录的电子邮件地址,或添加一个新地址,只有来自受限域的电子邮件显示为选项。此图显示了Google登录,以及两个先前已通过身份验证的帐户。一个是个人gmail账户,我不想在这里显示。另一个来自白名单中的域,也是我唯一希望在此处显示的域:

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

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

我不明白这个问题,你到底想完成什么?你能举一些例子吗?刚刚添加了谷歌登录的屏幕截图。我想将此对话框限制为仅显示实际授权(在设置白名单中)登录的电子邮件帐户。我捕获了这样一个案例:他们使用无效帐户登录,但希望避免显示没有访问权限的帐户的混淆。快速研究显示了类似的问题。尝试定义
SOCIAL\u AUTH\u GOOGLE\u OAUTH2\u AUTH\u EXTRA\u ARGUMENTS={'hd':'yourdomain.com'}
设置名称为
SOCIAL\u AUTH\u GOOGLE\u OAUTH2\u AUTH\u EXTRA\u ARGUMENTS
,而不是
SOCIAL\u AUTH\u GOOGLE\u OAUTH2\u EXTRA\u ARGUMENTS
。一旦定义,对指定域的限制将起作用。
'approval\u prompt':'force'
是在Google上强制执行帐户对话框,
'access\u type':'offline'
是获取一个
刷新\u令牌
,您可以随时使用它来交换
访问令牌