允许重复的用户名

我正在开发一个django项目,它要求在他们自己的username空间中分隔用户组。

例如,我可能有多个“组织”, username只能在该组织内唯一。

我知道我可以通过使用另一个包含用户名/组织ID的模型来做到这一点,但仍然会在defualt django auth User上留下这个无用的(和必填)字段,我将不得不填充某些内容。

我已经通过自己的身份验证后端编写了一个针对LDAP的用户身份验证。 但是,正如我前面提到的,我还是坚持了如何填充/忽略问题username在默认的Django用户字段。

有没有办法删除Django auth用户username的唯一性限制?


我不确定这是否正是您要查找的内容,但我认为您可以使用类似于此答案中的内容。

下面的代码可以工作,只要它在Django加载模型时执行的地方。

from django.contrib.auth.models import User

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

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


你可以做的是扩展用户模型。 对于用户表,生成根本不会在网站上显示的用户名(例如A_123,A_345)。

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

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

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


我没有亲自被要求找到解决方案,但是解决这个问题的一种方法(从SAAS的角度来看)是在用户名前加一个组织标识符(假定独特的组织)。 例如:subdomain.yoursite.com将等同于具有用户名:subdomain_username的用户。 您只需在登录到子域时编写一些业务逻辑即可将其添加到用户名中。

链接地址: http://www.djcxy.com/p/5767.html

上一篇: Allow duplicate usernames

下一篇: how to get data back?