【发布时间】:2018-09-10 10:14:13
【问题描述】:
这听起来像是一种反模式或弱系统设计,但我的应用程序的客户端要求可以有多个用户使用相同的电子邮件地址。
所以我在 users 表中添加了另一个名为 username 的唯一列,并从 email 列中删除了 ->unique() 约束。
注册、登录正常,但在密码重置过程中出现问题。
考虑场景:
用户名 - johndoe,电子邮件 - john@example.com
用户名 - janedoe,电子邮件 - john@example.com
用户名 - jimmydoe,电子邮件 - john@example.com
如果其中任何人请求密码重置链接,他们必须使用 johndoe@example.com 作为他们的电子邮件。那么当他们点击邮件中的重置链接时,哪个用户的密码实际上会被重置?原来,第一个用户,在这种情况下,是 johndoe。即使请求是由 janedoe 或 jimmydoe 提出的。
那么如何重置单个用户名而不是电子邮件的密码?我应该在 ForgotPasswordController 和/或 ResetPasswordController 控制器中进行哪些更改来解决这个问题?或者,我是否必须在核心框架中进行更改?如果是这样,在哪里以及如何?
【问题讨论】:
-
这是什么 Laravel 版本?你使用股票密码重置流程吗?
-
当我想到你的问题时,我越来越想知道,你住在世界上哪个地方人们共享电子邮件帐户的地方。可以通过访问某人的电子邮件帐户来实现各种身份盗用。
-
@Kyslik 是股票密码重置流程。通过添加用户名唯一列,我所做的唯一更改是在用户表中。要回答您的下一个问题,我知道这很奇怪 :D 但仍有一个问题:尽管这些帐户似乎属于不同的用户,但实际上并非如此。所有三个帐户都将由拥有该电子邮件的同一个人访问:-|所以,是的,电子邮件帐户没有与他人共享。
-
你有桌子
password_resets吗?检查它,你会看到它只使用“电子邮件”字段。除此之外,请检查Illuminate\Auth\Passwords\PasswordResetServiceProvider以了解有关密码流的见解。 -
您可以修改忘记密码模块,他们可以输入用户名而不是电子邮件ID来启动忘记密码程序