繁体   English   中英

如何只允许具有特定域的用户登录? Django 谷歌认证

[英]How to permit only users with a particular domain to login? Django google authentication

我试图限制对页面的访问仅限于登录用户。 我用的是google认证,但它让每个帐户都可以登录; 相反,我想避免与“fermi.mo.it”不同的每个域。 像 luca@gmail.com 这样的谷歌帐户应该无法登录,而像 luca@fermi.mo.it 这样的帐户应该可以。

我注意到这段代码可以做到,但它不起作用。 它说:“没有名为'social_core'的模块”,但我安装了它。

AUTHENTICATION_BACKENDS = (
    'social_core.backends.google.GoogleOAuth2',
    'django.contrib.auth.backends.ModelBackend',
)
SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS = ['fermi.mo.it']

这些是我安装的所有模块:

如果 django 无法找到该模块,请确保您已添加'social_django' ro 安装的应用程序。

其他解决方案是您可以根据您的需要在 Serializer 或 model 级别创建验证器。 他们选择谁? 那是另一个话题。

  1. Django Model 字段验证与 DRF 串行器字段验证
  2. 如何在 DjangoREST 框架中验证完整的 model 数据

您只需检查 email 是否包含字符串'fermi.mo.it' 如果不这样做,则引发异常。

每个人的文档: Django ValidatorsValidators DRF

我可以看到 OP 已经安装了应用程序

pip install social-auth-app-django

所以,现在OP需要

1 确保已将应用程序添加到INSTALLED_APPS设置

INSTALLED_APPS = (
    ...
    'social_django',
    ...
)

2 之后,同步数据库以创建所需的模型

./manage.py migrate

3 然后,一个人想要限制谷歌在列表中显示的电子邮件

SOCIAL_AUTH_GOOGLE_OAUTH2_AUTH_EXTRA_ARGUMENTS = {
        'hd': 'fermi.mo.it'
    }

由于OP想要

允许每个人访问@companyname.net,并且只允许来自其他域的特定其他人。

然后 OP 可以继续使用SOCIAL_AUTH_<BACKEND_NAME>_WHITELISTED_DOMAINS ,因为 OP 已经在这样做,并且还引入SOCIAL_AUTH_<BACKEND_NAME>_WHITELISTED_EMAILS以添加 OP 也希望登录的特定电子邮件。

4 最后,要限制可以登录的电子邮件

SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS = ['fermi.mo.it']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM