1

我正在使用 Laravel 7.x 和 sanctum。登录正常,我想从我的 SPA 应用程序中创建一个忘记密码选项。

我在基础知识上苦苦挣扎,因为文档中的大多数示例都依赖于身份验证脚手架。到目前为止,我已经设法获得以下内容:

  • 我有一个控制器类,它使用一个名为ForgotPasswordController的方法调用,该方法reset接收要通过 POST 重置的电子邮件。
  • 我创建了一个对象:$user = User::where('email', $email)->get()->first();

在这一点上,我对架构太陌生了,不知道下一步该去哪里,无论是密码门面,我在Illuminat\Auth\Password命名空间中看到了一些额外的类。我的目标是创建一个过期的令牌,通过默认的电子邮件配置将其通过电子邮件发送给用户(我知道如何发送电子邮件/设计模板),然后能够进行网络服务调用以允许解析密码。

以下是我认为我知道的...

  • 我已经CanResetPassword在我的用户模型上设置了特征,我认为这是支持密码重置的本机方法所必需的
  • 我相信目标是创建一个针对用户电子邮件的重置令牌,该令牌会在一段时间后过期,然后将该令牌附加到电子邮件中的 url 上(我不知道围绕令牌生成的架构含义表行
  • 有一个Password带有sendResetLink方法的外观 - 但此方法不适用于 spa 应用程序,因为客户端应用程序的基本 url 会有所不同,所以我假设必须重新编写本机的东西。事实上,调用这个方法会返回一个错误Route [password.reset] not defined

我假设我需要密码 Facade,如果需要,生成令牌的方法是什么?我应该只是通过电子邮件发送附加令牌的链接,还是有其他架构考虑来支持令牌到期?

如果我的问题有缺陷,我深表歉意,我对架构不清楚,所以我在做假设。

4

1 回答 1

1

您是否尝试过 Laravel身份验证?所有身份验证要求都已移至名为laravel/ui.

通过安装该软件包,您可以使用 Laravel 身份验证。它将处理您的注册、登录和忘记密码的过程。

该软件包将为所有这些进程创建一些控制器,而您需要忘记密码的控制器是

  • ForgotPasswordController:将生成并发送重置密码链接。
  • ResetPasswordController:将通过获取用户的电子邮件、新密码和重置密码令牌来重置密码。

但是如果你不想使用官方的 Laravel 包,你应该采取以下步骤:

  1. 向用户显示“请求重置密码表单”。
  2. 验证用户提供的电子邮件。
  3. 生成一个随机重置密码令牌并将其存储在数据库中(需要一个至少包含两个字段的表:emailtoken)。
  4. 将该令牌发送给用户(最好在重置密码链接中将其作为 URL 参数发送)。
  5. 当用户导航到重置密码页面时,再次询问电子邮件并通过检查您的数据库表并匹配电子邮件和令牌来验证令牌。
  6. 此时将密码重置为用户想要的任何内容。

更新:我使用这段代码生成随机令牌:

$email = 'user@email.com';
$token = \Illuminate\Support\Str::random(10);

while(\DB::table('reset_password_tokens')->where('token', $token)->exists()) {
    $token = \Illuminate\Support\Str::random(10);
}

\DB::table('reset_password_tokens')->insert(compact('email', 'token'));
于 2020-07-06T04:09:11.190 回答