本小节将介绍一下,邮箱验证的全过程。laravel框架5.5,如果版本较高的话,可以省略几个步骤,因为laravel已经集成了。

    调整数据库users表字段
>$ php artisan make:migration update_users_add_email_verified --table=users

--table=user: 告诉laravel迁移文件是针对users表进行修改的。

对生成好的迁移文件(database/migrations/< your_date >_update_users_add_email_verified.php),修改如下:

执行代码迁移:

>$ php artisan migrate
    修改模型User.php
// 增加字段
protected $fillable = [ 'name', 'email', 'password', 'email_verified' ];

// 增加casts属性。将tinyint类型的转换为bool类型
protected $casts = [
'email_verified' => boolean
];
    创建邮箱验证中间件

希望用户在验证邮箱之后才能正常使用我们系统的功能,当用户尚未验证邮箱时,访问其他页面都会被重定向到一个提示验证邮箱的页面。 

>$ php artisan make:middleware CheckIfEmailVerified

 编写中间件:

/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request 当前请求对象
* @param \Closure $next 执行下一个中间件闭包函数
* @return mixed
*/
public function handle($request, Closure $next)
{

if ( !$request->user()->email_verified ) {
// 判断是否是AJAX请求
if ( $request->expectsJson() ) {
return response()->json(['msg'=>'请先验证邮箱'], 400);
}
// 跳转到邮箱验证页面
return redirect(route('email_verify_notice'));
}
return $next($request);
}

注册中间件(app\Http\Kernel.php):

protected $routeMiddleware = [
...
'email_verified' => \App\Http\Middleware\CheckIfEmailVerified::class, ];

修改routes/web.php

Route::group(['middleware'=>'auth'], function() {
// 邮箱验证页面
Route::get('/email_verify_notice', 'PagesController@emailVerifyNotic')
->name('email_verify_notice');
// 开始验证邮箱
Route::group(['middleware'=>'email_verified'], function() {
Route::get('/test', function() {
return 'Your email is verified';
});
});
// 结束
});
    编辑验证邮箱页面
// 对应于路由文件email_verify_notice
// 在控制下PagesController下新建方法emailVerifyNotic
public function emailVerifyNotic(Request $request)
{
return view('pages.email_verify_notice');
}

新建视图文件:

/resource/views/pages/email_verify_notice.blade.php

@extends('layouts.app')

@section('title', '邮箱验证')

@section('content')
<div class="panel panel-default">
<div class="panel-heading">
提示
</div>
<div class="panel-body text-center">
<h1>请先验证邮箱</h1>
<a class="btn btn-danger" href="{{ route('root') }}">返回首页</a>
</div>
</div>
@endsection
    简单测试       

        首先,必须要登录。 目前可以直接修改数据库字段email_verified的值,改为0(未验证)或1(已验证)即可。因为在创建字段时用的是bool型,转换到MySQL就是tinyint(1)。由于在模型文件中使用了$casts属性,将整型0和1转换成了bool型。

        至此,已经完成了邮箱验证的第一部分工作。包括路由、中间件、邮箱验证页面等。接下来将介绍邮箱验证的第二篇,也就是发送邮箱验证码,进行验证。

        由于能力有限,不足或有不解之处,希望在下方评论区与我讨论,共同提高。