在django中使用电子邮件而不是登录名

Art*_*Art 7 database architecture django data-structures

首先,这不是如何对电子邮件/密码对进行身份验证的问题,而是如何生成逻辑,如果您愿意,还可以生成漂亮的数据结构.

我想在给定的django项目中使用电子邮件作为用户名.但是,我无法重新使用auth.User模型提供的字段,原因至少有两个:

  1. auth.User.username的字段max_length是30个字符,对于某些电子邮件地址可能不够.

  2. auth.User.email不是唯一的 - 显然不能满足前提条件,即用户名必须是唯一的.

因此,一个显而易见的方法是将用户名存储在自定义配置文件中,该配置文件链接到auth.User.在这种情况下,我们必须处理以下问题:

  1. 为auth.User.username生成唯一的用户名 - 电子邮件的md5哈希应该没问题吗?
  2. 完全遗漏auth.User.email为空 - 因为它只有75个字符长,而根据RFC 5321(有效电子邮件地址的最大长度是多少?),电子邮件可以长达256个字符.

以下问题源于提出的解决方案:

  1. 一个是无法为密码重置等标准操作重用内置视图/模板
  2. 如果电子邮件更改,则必须更新auth.User.username

为了增加石油,django开发人员不太可能在任何可预见的未来修复此限制 - 请参阅http://code.djangoproject.com/ticket/11365

所以问题是:有没有其他方法可以做到这一点你是否看到上面提出的解决方案有任何其他缺点?

谢谢!

Pet*_*ell 5

我有一个客户有一个自1995年以来一直在增加的商业网站(是的,我们在这里谈论早期采用者).无论如何,他们已经建立了一个用户群,而且这些名字完全不符合Django的用户名.

我看了几个方法来处理它,它们都感觉像黑客(这是2007年的夏天),所以我说拧了它并直接攻击contrib.auth.models.User.我只需更改大约10行代码,增加字段大小,并调整验证器.从那以后我们做了两次升级--0.97-pre => 1.0,1.0 => 1.1.1 - 每次只需要15分钟来"移植黑客".

它不漂亮,而且我可能会像这样在地狱中燃烧,但这样做的时间比我能想到的任何其他东西花费的时间少,前端端口完全没有问题.

  • 是的,这绝对是让你在地狱xD中燃烧的东西! (2认同)