Django使用管理站点添加远程用户

时间:2013-10-31 14:24:32

标签: django authentication remoteusermiddleware

我在启用了Shibboleth的服务器上运行Django站点,因此使用Remote User authentication backend。所有用户都通过此服务进行身份验证(如LDAP)。这适合我。但是,我的站点已被锁定,因此只有属于员工组的用户才能访问这些视图 - 因此这需要“超级用户”进入数据库或管理站点并将用户更改为员工。我想改变这个工作流程,以便我可以在Django管理站点中预先创建/预授权远程用户,所以当他们第一次尝试登录时,他们不必等待有人翻转他们帐户上的“员工”标志。

问题是Django管理员网站希望您为所有新用户输入密码。但是在我的数据库中,远程用户有空白的密码字段 - 虽然看起来密码字段的内容与远程验证无关,但我更希望超级管理员不必为每个人设置“假”密码。

如果我直接在MySQL数据库中创建用户,我可以很好地创建远程用户,因为我可以将密码字段留空。但是,我不希望直接向其他超级管理员发送数据库访问。

我已尝试从this SO post的管理网站中删除密码字段。但它仍然带有验证错误,我错过了一个字段(即密码)。

我的admin.py:

from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

admin.site.unregister(User)

class MyUserAdmin(UserAdmin):
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('username', 'email',)}
        ),
    )

admin.site.register(User, MyUserAdmin)

问题:在Django设置中预先填充授权远程用户的最佳方法是什么?我用MySQL运行1.5.1。如果我创建自定义添加用户视图,这是最简单的方法吗?或者有办法以某种方式利用现有的Django管理员视图吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

创建自己的UserCreationForm。使用Django的实现作为指南,但在保存方法中省略密码字段和set_password调用。

然后告诉您的MyUserAdmin使用您的自定义用户创建表单。

class MyUserAdmin(UserAdmin):
    add_form = MyUserCreationForm