2016年9月1日 星期四

【扩展推荐】Laravel-user-verification 为你的应用添加验证用户邮箱逻辑

说明

我们在开发项目时,通常要发一封验证邮件给用户,用以证明用户输入的邮箱是真实有效的。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. 范例

现在,我们来模拟整套流程的操作:
  1. 用户注册后会给其发验证邮件;
  2. 用户点击验证邮件里的链接地址能跳回本站指定的 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 方法,此方法是 VerifiesUsersTrait 里的方法,他会自动处理验证逻辑。

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());
    }
本项目由 The EST Group 成员 @monkey 整理发布,首发地为 PHPHub 社区,转载必须贴上原文链接 https://phphub.org/topics/2540
全文完。

reference : https://phphub.org/topics/2540

沒有留言:

wibiya widget