集成python-social-auth(social-app-django)与Django管理员一起使用

时间:2017-04-06 05:55:58

标签: python django python-social-auth

我想创建一个使用django管理员的应用,但允许通过谷歌(我的公司谷歌帐户)登录代替django默认的ModelAdmin。

目前,看起来social-app-django google )是可行的方法,但在安装和设置项目后,我不清楚如何允许django管理员登录使用social-app-django身份验证。我试图像http://python-social-auth.readthedocs.io/en/latest/configuration/django.html中所述配置我的项目,但目前尚不清楚如何将其与django管理员集成。

我发现这个snippit(似乎已过时)并添加了它,但在我尝试转到/admin/时获得了404:

  

找不到页面(404)请求方法:GET请求   网址:http://127.0.0.1:8000/accounts/login/?next=/admin/login/%3Fnext%3D/admin/   使用telos.urls中定义的URLconf,Django尝试了这些URL   模式,按此顺序:^ login /(?P [^ /] +)/ $ [name ='begin']   ^完成/(?P [^ /] +)/ $ [name ='complete']   ^ disconnect /(?P [^ /] +)/ $ [name ='disconnect']   ^断开/(ΔP[^ /] +)/(ΔP[^ /] +)/ $   [name ='disconnect_individual'] ^ admin /当前路径,   accounts / login /,与这些中的任何一个都不匹配。

如果我删除了snippit,/admin/将重定向到/admin/login/,登录尝试时会返回错误文本:

  

请输入员工帐户的正确用户名和密码。   请注意,这两个字段可能区分大小写。

除了configuration之外,我还在settings.py添加了以下内容:

projects / models.py(MyUser)

from django.contrib.auth.models import AbstractUser

class MyUser(AbstractUser):
    pass

settings.py

# for identification of SOCIAL_AUTH_USER
# http://python-social-auth.readthedocs.io/en/latest/configuration/settings.html#user-model
SOCIAL_AUTH_USER_MODEL = 'projects.MyUser'
AUTH_USER_MODEL = 'projects.MyUser'  # not sure if this is needed

有人可以指导我如何设置我的项目以允许我通过social-app-django google )登录django管理员吗?

1 个答案:

答案 0 :(得分:1)

Django Admin使用auth contrib应用程序,因此任何身份验证过程都会触发与登录非管理员部分的用户相同的机制,如果定义了python-social-auth后端,它将由AUTHENTICATION_BACKENDS后端处理在Login with Google设置中。

为了使其成功,您需要:

  1. /login/google-oauth2链接(链接到is_staff)添加到登录表单。您可以通过添加admin/login.html模板或定义自定义AdminSite
  2. 来覆盖默认登录表单
  3. 确保用户被标记为a = b; ,否则将禁止访问管理员。