codicastudio/verify-new-email

一个随机的 Codica Studio 包。

1.0.0 2020-09-24 20:09 UTC

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