protonemedia/laravel-verify-new-email

处理电子邮件地址更新和验证的软件包

v1.10.0 2024-02-27 20:13 UTC

README

Latest Version on Packagist run-tests Quality Score Total Downloads

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)。有关更多信息,请参阅 许可证文件