返回

Laravel 10 使用手机号码替代电子邮件地址进行密码重置,增强安全性提升用户体验

php

使用手机号码代替电子邮件地址进行 Laravel 10 密码重置

前言

在 Laravel 10 中,忘记密码流程默认使用电子邮件地址作为身份验证方式。然而,使用手机号码可以带来诸多好处,包括:

  • 增强安全性: 手机号码通常比电子邮件地址更难被盗用或泄露。
  • 提高用户便利性: 大多数人随时随地都可以访问他们的手机,这使忘记密码的恢复过程更加方便。
  • 简化注册流程: 使用手机号码可以简化注册流程,因为不再需要验证电子邮件地址。

本教程将指导你完成在 Laravel 10 中将用于忘记密码的电子邮件地址更改为手机号码的步骤。

步骤 1:修改模型

首先,我们需要修改 User 模型以包含手机号码字段。这可以通过在 app/Models/User.php 文件中添加以下代码来实现:

protected $fillable = [
    'name',
    'email',
    'mobile',
    'password',
];

步骤 2:修改控制器

接下来,我们需要修改 ForgotPasswordController 以接受手机号码并发送重置密码链接。这可以通过在 app/Http/Controllers/Auth/ForgotPasswordController.php 文件中进行以下更改来实现:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;

class ForgotPasswordController extends Controller
{
    protected function credentials(Request $request)
    {
        return $request->only('mobile');
    }

    public function sendResetLinkEmail(Request $request)
    {
        $this->validate($request, ['mobile' => 'required|numeric']);
        $user = User::query()->where('mobile', $request->mobile)->first();
        if (!$user) {
            return back()
                ->withErrors(['mobile' => '该手机号尚未注册。']);
        }
        $token = Password::broker()->createToken($user);
        $user->notify(new ResetPasswordNotification($token));
        return back()
            ->with('status', '重置密码链接已发送至你的手机。');
    }
}

步骤 3:创建通知

我们需要创建一个新的通知类来处理发送重置密码链接。这可以通过在 app/Notifications/ResetPasswordNotification.php 文件中添加以下代码来实现:

namespace App\Notifications;

use Illuminate\Auth\Notifications\ResetPassword;

class ResetPasswordNotification extends ResetPassword
{
    public function via($notifiable)
    {
        return ['sms'];
    }

    public function toSms($notifiable)
    {
        return [
            'message' => '你的重置密码链接为:' . $this->resetUrl,
        ];
    }
}

步骤 4:配置 SMS 发送

你需要配置 SMS 发送以使用你首选的 SMS 服务提供商。具体配置步骤因提供商而异,但通常包括设置以下环境变量:

  • SMS_DRIVER:SMS 驱动程序(例如 lognexmo
  • SMS_FROM:发件人号码
  • SMS_SECRET:API 密钥或密码

步骤 5:测试

完成所有配置后,你可以通过访问以下 URL 来测试忘记密码流程:

/password/reset

输入你的手机号码并单击“发送密码重置链接”。你应该会收到一条包含重置密码链接的短信。

结论

通过按照本教程中的步骤,你已经成功地将 Laravel 10 中用于忘记密码的电子邮件地址更改为手机号码。这将增强安全性并提高用户体验,为你的应用程序提供更强大的身份验证系统。

常见问题解答

  • 问:我需要做什么更改才能使用电子邮箱找回密码?

    • 答:'mobile' 替换为 'email' 作为 credentials 方法中返回的唯一输入。
  • 问:我可以用其他方式代替手机号码和电子邮件地址进行身份验证吗?

    • 答: 是的,你可以通过在 User 模型中添加其他字段并相应地修改 ForgotPasswordController 来实现。
  • 问:如何确保 SMS 发送安全可靠?

    • 答: 选择一个提供安全协议和加密功能的 SMS 服务提供商。
  • 问:我可以使用多个渠道发送密码重置链接吗?

    • 答: 是的,你可以在 via 方法中指定多个渠道,例如电子邮件和 SMS。
  • 问:如何调试忘记密码流程中的问题?

    • 答: 使用 dd() 函数来调试控制器和通知类,并在 log 文件中查找错误消息。