voerro/laravel-email-verification

此包已废弃且不再维护。未建议替代包。

简单实现电子邮件验证

v1.1.1 2018-02-12 08:15 UTC

This package is auto-updated.

Last update: 2021-02-24 07:53:32 UTC


README

Packagist Packagist Packagist

轻松将电子邮件验证添加到您的Web项目或API中。

安装

  1. 使用composer安装此包
composer require voerro/laravel-email-verification
  1. 从5.5版本开始,Laravel支持包自动发现。如果您使用的是旧版本,请在 config/app.php 中注册服务提供者。
...
'providers' => [
    ...
    Voerro\Laravel\EmailVerification\EmailVerificationServiceProvider::class,
    ...
],
...
  1. 运行迁移以安装包的表来管理验证令牌
php artisan migrate
  1. 将包的 trait EmailVerifiable 添加到您的用户模型中,以便向其添加辅助方法,即 verificationToken() 关系和一个检查用户电子邮件是否已验证的方法 emailVerified()
<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Voerro\Laravel\EmailVerification\Traits\EmailVerifiable;

class User extends Authenticatable
{
    use Notifiable, EmailVerifiable;

    ...
}

进一步安装 - Web项目

普通Web项目的进一步步骤。如果您正在开发API,请跳过此部分。

  1. 覆盖 RegisterController 文件中的 registered 方法。在内部调用包的 registered() 方法。
...
/**
 * The user has been registered.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  mixed  $user
 * @return mixed
 */
protected function registered($request, $user)
{
    return EmailVerification::registered($user);
}
...

registered() 方法为新注册的用户生成令牌,将其发送给他们,登出用户,并将他们重定向到带有消息的登录页面。稍后会有更多介绍。

  1. 注册包的中间件,它将注销所有未经验证的电子邮件的已认证用户,并将他们重定向到登录页面。您可以在 app/Http/Kernel.php 文件中这样做。
...
/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    ...
    'web' => [
        ...
        \Voerro\Laravel\EmailVerification\Middleware\LogoutUnverifiedUsers::class,
    ],
    ...
];

您还可以将此中间件注册为路由中间件,以将其应用于所选路由,而不是整个 web 中间件组。

进一步安装 - API

API项目的进一步步骤。如果您正在开发普通Web项目,请跳过此部分。

  1. 在您的API中注册用户后,调用此方法。
return EmailVerification::registeredApi($user);

registeredApi() 方法为新注册的用户生成令牌,将其发送给他们,并返回JSON响应。

  1. 注册包的中间件,它会注销所有未经验证的电子邮件的已认证用户,并返回带有409状态码的JSON响应。您可以在 app/Http/Kernel.php 文件中这样做。
...
/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    ...
    'api' => [
        'throttle:60,1',
        'bindings',
        ...
        \Voerro\Laravel\EmailVerification\Middleware\LogoutUnverifiedUsers::class,
        ...
    ],
    ...
];

您还可以将此中间件注册为路由中间件,以将其应用于所选路由,而不是整个 api 中间件组。

  1. 发送在电子邮件中的电子邮件验证链接将指向API所在的域名,即使您在不同的域名上使用Web客户端,或者是一个移动客户端。

如果想要以不同的方式处理验证,包提供了一个GET端点 /api/auth/email-verification/{token}。它尝试验证URL中提供的令牌,并返回带有 message 和200状态(如果令牌正确)或404状态(如果令牌不存在或已过期)的JSON响应。

在这种情况下,您可能还想使用自己的mailable。下面将介绍如何实现这一点。

手动处理或自定义流程

如果您想手动处理或自定义流程,请查看 src/EmailVerification.php 类。这是包的主要文件。您可以直接在需要的地方使用其中的所有方法,每个方法都有 DocBlock。

上面提到的 registered() 方法也来自该类。

registered() 方法

以下是原始方法的代码。

public static function registered($user)
{
    $token = self::generateToken($user->id);
    $token->sendVerificationEmail(UserRegistered::class);

    auth()->logout();

    return redirect(config('email_verification.redirect_on_failure'))
        ->with(
        'status',
        __('email-verification::email_verification.message.after.registration')
    );
}

如果您正在开发 API,则下面的 registeredApi() 方法在底层

public static function registeredApi($user)
{
    $token = self::generateToken($user->id);
    $token->sendVerificationEmail(UserRegistered::class);

    auth()->logout();

    return response()->json([
        'message' => __('email-verification::email_verification.message.after.registration'),
        'status' => 200
    ], 200);
}

使用自定义 Mailable

您不必在代码中调用 registered()registeredApi() 方法,只需将方法的内容复制并粘贴到您需要的地方。将您的 mailable 传递给 $token->sendVerificationEmail() 方法。您的 mailable 必须在构造函数中接受一个 $token 变量。使用此变量在您的 mailable 中形成验证 URL。

配置和翻译

如果您想编辑配置文件或翻译,运行 php artisan vendor:publish 并从列表中选择 Voerro\Laravel\EmailVerification\EmailVerificationServiceProvider

配置文件将复制到 config/email_verficiation.php,而翻译文件将复制到 resources/lang/vendor/email-verification/ 文件夹。默认情况下,以下语言可用

  • 英语
  • 俄语

通知

包在发生某些事件后将通知附加到会话中。您可以通过 session('status) 在控制器和视图中访问这些通知。例如,您可以将此添加到您的布局文件中

@if (session('status'))
    <p class="alert alert-info">{{ session('status') }}</p>
@endif

许可证

这是一个开源软件,根据 MIT 许可证 许可。