voerro / laravel-email-verification
简单实现电子邮件验证
Requires
- php: >=7.0
- illuminate/database: 5.4.* || 5.5.* || 5.6.*
- illuminate/support: 5.4.* || 5.5.* || 5.6.*
- nesbot/carbon: ~1.21
Requires (Dev)
- orchestra/database: ^3.6.0-BETA1
- orchestra/testbench: ^3.6
- phpunit/phpunit: ^7.0
README
轻松将电子邮件验证添加到您的Web项目或API中。
安装
- 使用composer安装此包
composer require voerro/laravel-email-verification
- 从5.5版本开始,Laravel支持包自动发现。如果您使用的是旧版本,请在
config/app.php中注册服务提供者。
... 'providers' => [ ... Voerro\Laravel\EmailVerification\EmailVerificationServiceProvider::class, ... ], ...
- 运行迁移以安装包的表来管理验证令牌
php artisan migrate
- 将包的
traitEmailVerifiable添加到您的用户模型中,以便向其添加辅助方法,即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,请跳过此部分。
- 覆盖
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() 方法为新注册的用户生成令牌,将其发送给他们,登出用户,并将他们重定向到带有消息的登录页面。稍后会有更多介绍。
- 注册包的中间件,它将注销所有未经验证的电子邮件的已认证用户,并将他们重定向到登录页面。您可以在
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项目,请跳过此部分。
- 在您的API中注册用户后,调用此方法。
return EmailVerification::registeredApi($user);
registeredApi() 方法为新注册的用户生成令牌,将其发送给他们,并返回JSON响应。
- 注册包的中间件,它会注销所有未经验证的电子邮件的已认证用户,并返回带有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 中间件组。
- 发送在电子邮件中的电子邮件验证链接将指向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 许可证 许可。