Email认证

简介

许多 Web 应用要求用户在使用之前进行 Email 地址验证。Laravel 不会强迫你在每个应用中重复实现它,而是提供了便捷的方法来发送和校验电子邮件的验证请求。

Model 预备

开始之前, 验证你的 App\User 模型是否实现了 Illuminate\Contracts\Auth\MustVerifyEmail 契约。 此外,你应该使用 Illuminate\Auth\MustVerifyEmail trait:

  1. <?php
  2. namespace App;
  3. use Illuminate\Auth\MustVerifyEmail;
  4. use Illuminate\Notifications\Notifiable;
  5. use Illuminate\Foundation\Auth\User as Authenticatable;
  6. use Illuminate\Contracts\Auth\MustVerifyEmail as MustVerifyEmailContract;
  7. class User extends Authenticatable implements MustVerifyEmailContract
  8. {
  9. use MustVerifyEmail, Notifiable;
  10. // ...
  11. }

数据库注意事项

Email 验证字段

接下来,你的 user 需要包含一个 email_verified_at 字段用来存储 Email 地址通过验证的时间。默认情况下,Laravel 框架中 users 表的数据迁移已经包含了这个字段。所以,您需要做的就只是执行数据库迁移:

  1. php artisan migrate

路由

Laravel 的 Auth\VerificationController 类包含了发送验证链接和验证 Email 的必要逻辑。 通过将 verify 选项传给 Auth::routes 方法,就能为这个控制器注册所需要的路由:

  1. Auth::routes(['verify' => true]);

保护路由

路由中间件 可用于仅允许经过验证的用户访问指定路由。Laravel 附带了 verified 中间件,它定义在 Illuminate\Auth\Middleware\EnsureEmailIsVerified。由于此中间件已在应用程序的HTTP内核中注册,因此您需要做的就是将中间件附加到路由定义:

  1. Route::get('profile', function () {
  2. // 只有验证过的用户可以进入
  3. })->middleware('verified');

视图

当执行 make:auth 命令时,Laravel将生成邮箱验证需要的所有视图。 视图位于 resources/views/auth/verify.blade.php。您可以根据应用需要自定义此视图。

邮箱验证之后

在 Email 地址通过验证之后,用户将被重定向到 /home。你可以通过在 VerificationController 中定义 redirectTo 方法或属性来自定义重定向地址:

  1. protected $redirectTo = '/dashboard';

本文章首发在 LearnKu.com 网站上。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接 我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。