以前,还需要写中间件来处理邮箱是否验证过了。5.7 开始,Laravel 自带了邮箱验证的相关字段和功能。
以此基础,从零开始吧。
生成注册登录
php artisan make:auth
修改执行以下操作
修改 User 模型,使其实现 MustVerifyEmail
接口
class User extends Authenticatable implements MustVerifyEmail
启用与邮箱验证相关的路由(验证邮箱页面、重发验证邮件页面等),修改 routes/web.php
Auth::routes(['verify' => true]);
Laravel 自带了一个名为 verified 的中间件,如果一个未验证邮箱的用户尝试访问一个配置了 verified 中间件的路由,Laravel 就会提示该用户邮箱未激活。修改路由,加了一个中间件,测试看看。
Route::get('/', 'PageController@home')->name('home')->middleware('verified');
访问首页,发现会跳转到验证邮箱的页面了。证明邮箱验证生效。
看看 users 表,我们发现和以前比,多了一个 email_verified_at
字段。
激活邮箱
我们可以临时使用 MailHog 来模拟邮箱激活。
MailHog 是 Homestead 自带的一个组件,可以很方便地调试发送邮件。直接使用端口号 8025
就可以访问到。那么,怎么让其接受到邮件呢。修改 .env
文件。将 host 和 port 修改成下边的即可。
MAIL_HOST=127.0.0.1
MAIL_PORT=1025
修改完毕,刷新 mailhog
页面。点击首页链接,会跳转到验证页面。发送验证,查看邮箱,点击激活。再访问首页是不是就可以访问了。再看看数据库,会发现 email_verified_at
字段以及有值(日期时间)了。