4

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

问题是 Django 管理站点希望您为所有新用户输入密码。不过,在我的数据库中,远程用户的密码字段为空白——虽然密码字段的内容似乎对远程身份验证无关紧要,但我希望超级管理员不必为每个人设置“假”密码.

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

我已尝试根据此 SO 帖子从管理站点中删除密码字段。但它仍然会返回一个验证错误,即我缺少一个字段(即密码)。

我的管理员.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 管理视图?

谢谢!

4

1 回答 1

2

创建您自己的UserCreationForm. 使用 Django 的实现作为指导,但省略密码字段和set_passwordsave 方法中的调用。

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

class MyUserAdmin(UserAdmin):
    add_form = MyUserCreationForm
于 2013-10-31T15:53:13.540 回答