使用 Fortify 的电子邮件确认 Laravel

Email confirmation using Fortify Laravel

我正在使用没有 Jetstream 的 Fortify 进行身份验证。我在注册时阅读了有关电子邮件验证的文档。但是当用户更改电子邮件地址时如何确认电子邮件地址呢?是不是这个包很难实现,或者没有现成的功能,我必须从头开始?

在用户面板中可以更改用户名、电子邮件、phone 和 img(我稍后会添加):

public function user_update(Request $request){

      $user = Auth::user();

      $user->name = $request->input('name')?$request->input('name'):Auth::user()->name;
      $user->email = $request->input('email')?$request->input('email'):Auth::user()->email;
      $user->phone = $request->input('phone')?$request->input('phone'):(Auth::user()->phone?Auth::user()->phone:NULL);

      $user->update();

      return redirect()->back();
    }

路线:

Route::post('/user-panel/user-update', [AdminController::class, 'user_update'])->name('user_update');

当您在 fortify.php 配置文件中启用 Features::emailVerification() 功能时,您可以访问 verified 中间件,它确认 user 已通过断言验证了他们的电子邮件数据库中 useremail_verified_at 字段不为空。

因此,要触发 user 验证新电子邮件的要求(如果他们更改电子邮件),您要做的是将 email_verified_at 字段的值更改为 null如果 user 更改了他们的电子邮件地址。

可以自己写出这个逻辑,但是,Fortify 实际上提供了开箱即用的功能。在 app/Actions/Fortify 文件夹中,您会看到一个名为 UpdateUserProfileInformation.php 的文件,它完全满足您的要求并实现了整个电子邮件验证工作流程,包括生成一封新的验证电子邮件至 user.

对于您对默认 user.

结构所做的任何更改,您可能需要稍微更改此设置

此后,为了使用它,您需要做的就是适当地配置您的 <form>

<form action="{{ route('user-profile-information.update') }}" method="POST">
    @csrf
    @method("PUT")
</form>

如果您不喜欢命名路由,您可以使用 url,但最终结果是一样的。