codicastudio / verify-new-email
一个随机的 Codica Studio 包。
Requires
- php: ^7.4 || ^8.0
- illuminate/support: ^8.0
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.0
This package is not auto-updated.
Last update: 2024-09-21 22:20:55 UTC
README
Laravel 默认支持验证电子邮件地址。此包增加了验证新电子邮件地址的支持。当用户更新其电子邮件地址时,新地址将在验证之前不会替换旧地址。设置非常简单,同时仍然完全可定制。如果需要,它可以作为内置电子邮件验证功能的直接替代,因为这个包支持未认证的验证和自动登录。支持 Laravel 6.0 及更高版本,并需要 PHP 7.2 或更高版本。
安装
您可以通过 composer 安装此包
composer require protonemedia/laravel-verify-new-email
配置
发布数据库迁移、配置文件和电子邮件视图
php artisan vendor:publish --provider="ProtoneMedia\LaravelVerifyNewEmail\ServiceProvider"
您可以在 verify-new-email.php
配置文件中设置重定向路径。验证后,用户将被重定向到该路径。
可以通过更新 auth.verification.expire
设置来更改验证 URL 的过期时间,默认为 60 分钟。
用法
将 MustVerifyNewEmail
特性添加到您的 User
模型,并确保它还实现了框架的 MustVerifyEmail
接口。
<?php namespace App; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use ProtoneMedia\LaravelVerifyNewEmail\MustVerifyNewEmail; class User extends Authenticatable implements MustVerifyEmail { use MustVerifyNewEmail, Notifiable; }
现在您的 User
模型有一些新方法
// generates a token and sends a verification mail to 'me@newcompany.com'. $user->newEmail('me@newcompany.com'); // returns the currently pending email address that needs to be verified. $user->getPendingEmail(); // resends the verification mail for 'me@newcompany.com'. $user->resendPendingEmailVerificationMail(); // deletes the pending email address $user->clearPendingEmail();
newEmail
方法不会更新用户,当前电子邮件地址保持不变,直到新地址被验证。它在 pending_user_emails
表中存储一个令牌(与用户和新电子邮件地址关联)。一旦用户通过点击邮件中的链接验证了电子邮件地址,用户模型将被更新,令牌将从 pending_user_emails
表中删除。
resendPendingEmailVerificationMail
做的是完全一样的事情,它只是从之前的尝试中获取新的电子邮件地址。
验证后登录
验证了其电子邮件地址的用户将被自动登录。您可以通过将 login_after_verification
配置设置更改为 false
来禁用此功能。
覆盖默认的 Laravel 邮件验证
默认的 Laravel 实现 需要用户先登录才能验证其电子邮件地址。如果您想使用此包的逻辑来处理第一次验证流程,请覆盖以下 sendEmailVerificationNotification
方法。
<?php namespace App; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use ProtoneMedia\LaravelVerifyNewEmail\MustVerifyNewEmail; class User extends Authenticatable implements MustVerifyEmail { use MustVerifyNewEmail, Notifiable; public function sendEmailVerificationNotification() { $this->newEmail($this->getEmailForVerification()); } }
定制
您可以通过编辑发布的视图来更改验证邮件的内容,这些视图可以在 resources/views/vendor/verify-new-email
文件夹中找到。在验证 更新 的电子邮件地址时,将发送 verifyNewEmail.blade.php
视图。在用户首次(注册后)验证其初始电子邮件地址时,将发送 verifyFirstEmail.blade.php
视图。或者您可以在配置文件中设置您自己的自定义 Mailables 类
<?php return [ 'mailable_for_first_verification' => \ProtoneMedia\LaravelVerifyNewEmail\Mail\VerifyFirstEmail::class, 'mailable_for_new_email' => \ProtoneMedia\LaravelVerifyNewEmail\Mail\VerifyNewEmail::class, ];
您还可以覆盖 sendPendingEmailVerificationMail
方法来更改发送验证邮件的行为
<?php namespace App; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use ProtoneMedia\LaravelVerifyNewEmail\MustVerifyNewEmail; use ProtoneMedia\LaravelVerifyNewEmail\PendingUserEmail; class User extends Authenticatable implements MustVerifyEmail { use MustVerifyNewEmail, Notifiable; public function sendPendingEmailVerificationMail(PendingUserEmail $pendingUserEmail) { // send the mail... } }
该包有一个控制器来处理新电子邮件地址的激活。您可以在配置文件中指定一个自定义路由,该路由将用于生成验证 URL。令牌将作为参数传递,并且 URL 将被签名。
<?php return [ 'route' => 'user.email.verify', ];
测试
composer test