说明
我们在开发项目时,通常要发一封验证邮件给用户,用以证明用户输入的邮箱是真实有效的。laravel-user-verification 就提供了这个逻辑。
完整的高质量扩展包推荐列表,请前往:下载量最高 100 个 Laravel 扩展包推荐
1. 安装
1). 使用 composer 安装:
composer require jrean/laravel-user-verification
2). 修改
config/app
文件,在 providers
数组内追加如下内容'providers' => [
...
Jrean\UserVerification\UserVerificationServiceProvider::class,
],
3). 修改
config/app
文件,在 aliases
数组内追加如下内容'aliases' => [
...
'UserVerification' => Jrean\UserVerification\Facades\UserVerification::class,
],
4). 给用户表添加字段
# 运行以下命令,生成 Migration 文件
php artisan make:migration add_verification_to_users_table --table="users"
# 指定 Migration
php artisan migrate
运行完后,会给用户表添加两个字段:
verified
: 用于表示用户是否已经验证过邮箱,1 表示已验证,0 表示未验证;verification_token
: 发送给用户的 token。
至此,配置完毕。
2. 关键方法介绍
generate
UserVerification::generate(AuthenticatableContract $user)
调用此方法会生成验证 token,并将对应用户的验证状态设置为
未验证
。send
UserVerification::send(AuthenticatableContract $user, $subject = null)
调用此方法,将会给用户发送验证邮件,邮件模板如何设置将在下文介绍。
3. Trait 介绍
Jrean\UserVerification\Traits\VerifiesUsers
此 Trait 含有两个关键方法:
getVerification(Request $request, $token)
此方法用于处理验证逻辑,验证 token 是否正确。getVerificationError()
此方法用于展示验证失败后的错误提示。
我们可以把验证的路由地址指向
getVerification
方法(下文例子将会介绍到),让其自动验证。4. 自定义属性介绍
此 package 提供的自定义属性可以很方便的处理我们的验证邮箱业务逻辑,其属性列表如下:
$redirectIfVerified = '/';
如果用户已经验证过,需要跳转到哪个路由$redirectAfterTokenGeneration = '/';
token 生成成功以后,要跳转到哪个路由$redirectAfterVerification = '/';
token 验证成功以后,要跳转到哪个路由$redirectIfVerificationFails = '/verification/error';
token 验证失败以后,要跳转到哪个路由
我们的 Controller 在使用了
VerifiesUsers
Trait 的情况下,可以设置这几个属性,让其自动处理这些逻辑。5. 范例
现在,我们来模拟整套流程的操作:
- 用户注册后会给其发验证邮件;
- 用户点击验证邮件里的链接地址能跳回本站指定的 url,进行验证。
1). 定义好邮件内容模板
在你的项目里,新建一个模板文件
resources/views/emails/user-verification.blade.php
,这个文件将作为邮件正文发送给用户。此模板文件会将当前用户信息赋值到 $user
中。因此我们的模板文件可以这样写:点击此链接激活您的账户: ) . '?email=' . urlencode($user->email) }}"> {{ $link }}</a>
我们这里设置了一个
verification
的 route,为了让下面的例子可以正常运行,我们需要添加以下 route:Route::get('verification/{token}', 'Auth\AuthController@getVerification');
注:我们将此路由定义到了AuthController
的getVerification
方法,此方法是VerifiesUsers
Trait 里的方法,他会自动处理验证逻辑。
2). 定义好错误页面模板
在你的项目里,新建一个模板文件
resources/views/errors/user-verification.blade.php
,这个文件将作为验证失败的错误提示页面。
3). 加载 VerifiesUsers
Trait
在这里以
AuthController.php
文件为例,我们重写其注册逻辑,让用户注册完以后能自动发送一封验证邮件,并提供验证 Token 功能。...
use Jrean\UserVerification\Traits\VerifiesUsers;
use Jrean\UserVerification\Facades\UserVerification;
...
use VerifiesUsers;
// 验证失败后的跳转地址
public $redirectIfVerificationFails = '/emails/verification-result/failure';
// 检测到用户已经验证过后的跳转地址
public $redirectIfVerified = '/emails/verification-result/success';
// 验证成功后的跳转地址
public $redirectAfterVerification = '/emails/verification-result/success';
...
/**
* Handle a registration request for the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function postRegister(Request $request)
{
$validator = $this->validator($request->all());
if ($validator->fails()) {
$this->throwValidationException(
$request, $validator
);
}
$user = $this->create($request->all());
// 生成用户的验证 token,并将用户的 verified 设置为 0
UserVerification::generate($user);
// 给用户发邮件,邮件内容就是上文提到的 resources/views/emails/user-verification.blade.php 模板里的内容
UserVerification::send($user, '请验证您的邮箱');
return redirect($this->redirectPath());
}
全文完。
reference : https://phphub.org/topics/2540
沒有留言:
張貼留言