制作Django的电子邮件认证,如何将用户名字段与电子邮件联系起来?

时间:2010-08-02 07:51:00

标签: python database django authentication

我原来只是在创建帐户时简单地将电子邮件地址放入用户名和电子邮件字段,这不起作用,因为Django将用户名字段限制为30个字符,这可能不足以用于电子邮件地址。

我的第二个想法是md5电子邮件地址,将哈希值放入用户名,这将使它始终是唯一的(在技术上,也与电子邮件字段相同)。 md5是32个字符,同样我只有30个字符可供使用。

我的第三个想法是将最后两个字符从md5哈希的末尾删除,使其成为30,然后使用它,因为我计划将其与完整哈希一起使用。但是我不知道结束两个与第30个角色完全相同的哈希的机会是什么,只有31和32不同,我已经砍掉了。

是否有更好的方法将用户名字段的内容与电子邮件地址相关联,以使其始终具有唯一性?

1 个答案:

答案 0 :(得分:4)

我们开发了一个django应用程序,它将电子邮件存储为用户名。 Django内置用户名模型限制为30个字符,这对于90%是好的。

为了支持更长的用户名,而不改变django源,我们使用了一个名为longer_username的微小的附加应用程序:

from django.db.models.signals import class_prepared

def longer_username(sender, *args, **kwargs):
    # You can't just do `if sender == django.contrib.auth.models.User`
    # because you would have to import the model
    # You have to test using __name__ and __module__
    if sender.__name__ == "User" and sender.__module__ == \
        "django.contrib.auth.models":
        sender._meta.get_field("username").max_length = 75

class_prepared.connect(longer_username)

我们将此作为第一个应用程序添加到INSTALLED_APPS中:

INSTALLED_APPS = (
    'longer_username',
    ...
)

就是这样。更多信息可以在这里找到: