Card image cap
PHP / 3个月前

[扩展推荐] 为你的 Laravel 项目增加用户邮件确认功能

如果你需要在 Laravel 项目中添加用户注册邮箱验证功能,Marcel Pociot 开发了一个名字贴切的新包,称为 laravel-confirm-email 。新用户需要注册时邮箱验证才能进行下一步操作。

这个包通过使用两个特性替换 Laravel 自身的 AuthenticatesUsersRegistersUsers 功能达到效果。用户注册之后,需要通过电子邮件验证确认账户信息。

安装

composer require beyondcode/laravel-confirm-email

用法

这个包需要一个数据库迁移文件,因此你需要执行 vendor:publish 命令:

php artisan vendor:publish --provider=BeyondCode\\EmailConfirmation\\EmailConfirmationServiceProvider

这里要注意生成了三个文件,你可以在对应的位置找到它们,

Copied File [/vendor/beyondcode/laravel-confirm-email/config/config.php] To [/config/confirmation.php]
Copied File [/vendor/beyondcode/laravel-confirm-email/database/migrations/add_confirmation_fields_to_users.php.stub] To [/database/migrations/2018_08_22_150403_add_confirmation_fields_to_users.php]
Copied Directory [/vendor/beyondcode/laravel-confirm-email/resources/lang] To [/resources/lang/vendor/confirmation]
Publishing complete.

接下来运行迁移:

php artisan migrate

配置登录,注册和忘记密码控制器

为了使用邮件验证,需要更换Laravel中AuthenticatesUsersRegistersUsersSendsPasswordResetEmails的traits,替换为当前包下的traits. 这些traits可以在以下三个文件中找到:

  • App\Http\Controllers\Auth\LoginController
  • App\Http\Controllers\Auth\RegisterController
  • App\Http\Controllers\Auth\ForgotPasswordController

添加确认并重新发送路由

将以下两个路由添加到您的routes/web.php文件中:

Route::name('auth.resend_confirmation')->get('/register/confirm/resend', 'Auth\RegisterController@resendConfirmation');
Route::name('auth.confirm')->get('/register/confirm/{confirmation_code}', 'Auth\RegisterController@confirm');

显示确认消息

此扩展包会向用户添加一些包含错误或者信息的消息。如果你需要向你的用户展示,请将其添加到您的login.blade.php

@if (session('confirmation'))
    <div class="alert alert-info" role="alert">
        {!! session('confirmation') !!}
    </div>
@endif

login.blade.phpemail.blade.php这两个文件下需要添加的内容:

@if ($errors->has('confirmation') > 0 )
    <div class="alert alert-danger" role="alert">
        {!! $errors->first('confirmation') !!}
    </div>
@endif

定制

此软件包附带一个语言文件,允许您修改用户可能看到的错误/确认消息。除此之外,您还可以通过在config/confirmation.php文件中更改确认代码来更改将用于完全发送确认代码的通知类。

更改重定向路由

您可以通过将这些值作为注册控制器中的属性或作为返回路由/ URL的方法来更改所有可能的重定向路由:

  • redirectConfirmationTo
  • redirectAfterRegistrationTo
  • redirectAfterResendConfirmationTo

他们默认重定义到 route('login')。

确认事件

成功确认邮件后,此扩展包将调用一个Confirmed事件,以便您方便地处理任何自定义逻辑,例如发送欢迎邮件或自动登录用户。

只需将Confirmed事件和监听器添加到EventServiceProvider中:

    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        'BeyondCode\EmailConfirmation\Events\Confirmed' => [
            'App\Listeners\YourOnConfirmedListener'
        ]
    ];

有关注册事件和侦听器的更多信息,请参阅Laravel文档。 相关截图如下: filefilefile

作者: Jourdon

本文地址: https://qiehe.net/posts/extended-recommendation-add-user-mail-confirmation-function-to-your-laravel-project

转载请注明出处!

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作! 赞赏码