Django-允许重复用户名

2024-04-19 05:51:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我在django工作一个项目,它要求在自己的username名称空间中有独立的用户组。

例如,我可能有多个“组织”,而且username在该组织中应该是唯一的。

我知道我可以通过使用另一个包含用户名/组织id的模型来实现这一点,但是这仍然会在defualt django authUser上留下这个无用的(并且是必需的)字段,我必须用一些东西来填充它。

我已经编写了自己的身份验证后端,根据LDAP验证用户。然而,正如我前面提到的,我仍然要解决如何填充/忽略默认django用户上的username字段的问题。

有没有办法为Django auth用户的username删除唯一性约束?


Tags: 项目django用户模型名称身份验证idusername
3条回答

我个人并没有被要求找到解决方案,但解决这个问题的一个方法(从SAAS的角度)是在用户名前面加上组织标识符(假定是唯一的组织)。例如:subdomain.yoursite.com等同于用户名为:subdomain_username的用户。您只需在登录到子域时编写一些业务逻辑,就可以将其附加到用户名上。

我不确定这是否正是你想要的,但我认为你可以使用类似于this answer中的方法。

只要在Django加载模型时执行以下代码,这些代码就可以工作。

from django.contrib.auth.models import User

User._meta.get_field('username')._unique = False

请注意,如果已经创建了auth_user表,则这不会更改该表上的数据库唯一约束。因此,您需要在运行syncdb之前进行此更改。或者,如果不想重新创建auth_user表,可以进行此更改,然后手动更改数据库表以删除约束。

您可以做的是扩展用户模型。对于用户表,生成一个不会在站点中显示的用户名(例如a_123、a_345)。

然后创建一个扩展用户的新模型。

class AppUser(User):
    username = models.CharField...
    organization = models.CharField...

然后创建使用AppUser而不是用户对象的自定义身份验证后端。

相关问题 更多 >