gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:47:13 26 4
gpt4 key购买 nike

首先,这不是如何在电子邮件/密码对上进行身份验证的问题,而是如何生成合乎逻辑的(如果您愿意的话)漂亮的数据结构。

我想在给定的 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 ( What is the maximum length of a valid email address? ) 电子邮件可以长达 256 个字符。

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

  1. 人们将无法重用内置 View /模板来进行密码重置等标准操作
  2. 如果电子邮件发生变化,则必须更新 auth.User.username

火上浇油,django 开发人员不太可能在任何可预见的 future 修复此限制 - 参见 http://code.djangoproject.com/ticket/11365

所以问题是:是否有任何其他方法可以做到这一点,您是否看到上述解决方案中的任何其他缺点?

谢谢!

最佳答案

我有一个客户有一个自 1995 年就开始运行的商业网站(是的,我们这里说的是早期采用者)。无论如何,他们已经建立了一个用户群,而且这些名称​​完全不符合 Django 的用户名理念。

我研究了几种处理它的方法,它们都感觉像是 hack(这是 2007 年夏天),所以我说去他妈的,然后直接 hack contrib.auth.models.User。我只需要更改大约 10 行代码、增加字段大小并调整验证器。从那时起,我们进行了两次升级——0.97-pre => 1.0 和 1.0 => 1.1.1——每次“移植 hack”只需要大约 15 分钟。

它并不漂亮,我可能会因为这样做而在 hell 中燃烧,但这样做花费的时间比我能想到的任何其他方法都少,而且转发端口完全不是问题。

关于database - 在 django 中使用电子邮件而不是登录名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2284987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com