我使用的是Django的默认用户模型,电子邮件不是唯一的,现在我有多个用户拥有相同的电子邮件地址。
您可以让User_A的电子邮件地址为user_a@example.com,然后新用户User_B可以使用相同的电子邮件地址user_a@example.com注册。
这在任何编程领域都没有意义,它会导致电子邮件发送功能混淆,并可能导致错误的密码重置(如果发送密码重置链接,两个用户共享同一个电子邮件地址)。< / p>
我没有看到明显的安全漏洞,因为只有原始用户才能控制原始电子邮件地址,因此攻击者不会收到重置的电子邮件。
然而,这可能导致原始用户User_A被锁定在其原始帐户之外(如果他忘记了密码)并且因为Django仅尝试重置新用户User_B而无法发出密码重置。显然,User_A希望访问他的帐户,而不是User_B的帐户。
答案 0 :(得分:5)
密码重置功能确实是based on email addresses。
它会向all accounts that have a corresponding email发送重置电子邮件。
传递给电子邮件模板的上下文包含user
,因此您的电子邮件重置消息可能包含用户名,以便用户识别这将重置的密码。
使用以下方法可以覆盖所有这些:
答案 1 :(得分:1)
django.contrib.auth使用用户名字段来标识用户,而不是电子邮件地址,因此如果两个用户具有相同的电子邮件地址,则不会发生冲突。
此外,由于电子邮件地址不是必需的,因此它在数据库中为空或空(两者都不是唯一的密钥)。
对于您的其他问题 - 密码重置将重置请求它的用户的密码,因为它是由用户名请求的。
拥有两个具有相同地址的帐户可能非常方便。例如,可能一个是管理员帐户,另一个是普通用户。