protonemedia / laravel-verify-new-email
处理电子邮件地址更新和验证的软件包
Requires
- php: ^8.1|^8.2|^8.3
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^10.4
This package is auto-updated.
Last update: 2024-09-20 14:06:23 UTC
README
Laravel自带电子邮件地址验证功能。此软件包增加了对新电子邮件地址验证的支持。当用户更新其电子邮件地址时,它不会替换旧地址,直到新地址被验证。设置非常简单,仍然可以完全自定义。如果您希望,它可以作为内置电子邮件验证功能的直接替换使用,因为这个软件包支持未认证的验证和自动登录。支持Laravel 9.0及更高版本,需要PHP 8.0或更高版本。
赞助我们
❤️ 我们自豪地通过开发Laravel软件包并免费提供来支持社区。如果您发现这个软件包节省了您的时间,或者您在专业上依赖它,请考虑赞助维护和开发,并查看我们的最新高级软件包:Inertia Table。跟踪问题和拉取请求需要时间,但我们很乐意提供帮助!
博客文章
如果您想了解更多关于此软件包背景的信息,请阅读博客文章。
要求
- PHP 8.1或更高版本
- Laravel 10或更高版本
安装
您可以通过Composer安装此软件包
composer require protonemedia/laravel-verify-new-email
配置
发布数据库迁移、配置文件和电子邮件视图
php artisan vendor:publish --provider="ProtoneMedia\LaravelVerifyNewEmail\ServiceProvider"
您可以在verify-new-email.php
配置文件中设置重定向路径。验证后,用户将被重定向到该路径。
验证URL的过期时间可以通过更新auth.verification.expire
设置来更改,默认为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
变更日志
有关最近更改的更多信息,请参阅 变更日志。
贡献
有关详细信息,请参阅 贡献指南。
其他 Laravel 包
Inertia Table
:Inertia.js 的终极表格,具有内置查询构建器。Laravel Blade On Demand
:用于在内存中编译 Blade 模板的 Laravel 包。Laravel Cross Eloquent Search
:用于搜索多个 Eloquent 模型的 Laravel 包。Laravel Eloquent Scope as Select
:停止在 PHP 中重复使用您的 Eloquent 查询作用域和约束。此包允许您通过将它们添加为子查询来重用查询作用域和约束。Laravel FFMpeg
:此包为 Laravel 提供了与 FFmpeg 的集成。文件存储由 Laravel 的文件系统处理。Laravel MinIO Testing Tools
:在 MinIO S3 服务器上运行您的测试。Laravel Mixins
:Laravel 精美的集合。Laravel Paddle
:支持 webhooks/events 的 Paddle.com API 集成,针对 Laravel。Laravel Task Runner
:像 Blade 组件一样编写 Shell 脚本,并在本地或远程服务器上运行它们。Laravel XSS Protection
:Laravel 中间件,用于保护您的应用程序免受跨站脚本 (XSS) 攻击。它清理请求数据,并可以清理 Blade 输出语句。
安全
如果您发现任何安全相关的问题,请通过电子邮件发送到 pascal@protone.media,而不是使用问题跟踪器。
致谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。