kaoken / laravel-email-reset

请求更改Auth用户的电子邮件地址,在移动到确认邮件的指定URL后更改。

1.0.3 2018-01-09 09:28 UTC

This package is auto-updated.

Last update: 2024-09-23 16:47:04 UTC


README

请求更改Auth用户的电子邮件地址,在移动到确认邮件的指定URL后更改。

Travis branch composer version licence laravel version

目录表

安装

composer:

composer require kaoken/laravel-email-reset

设置

按照以下方式添加到 config/app.php

    'providers' => [
        ...
        // add
        Kaoken\LaravelMailReset\MailResetServiceProvider::class
    ],

    'aliases' => [
        ...
        // add
        'MailReset' => Kaoken\LaravelMailReset\Facades\MailReset::class
    ],

添加到 config/auth.php 的示例

添加 'email_reset' => 'users',.

[
    ...
    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
        // add
        'email_reset' => 'users',
    ],
    ...
]
  • model 是用户模型类
  • email_confirmation 应根据需要修改从Mailable 继承的类。用于发送确认邮件。
  • table 是用于此服务的数据表名称
  • 如果 expire 在注册后X小时内未进行操作,则删除第一次更改的电子邮件。
    'email_resets' => [
        'users' => [
            'model' => App\User::class,
            'email_reset' => Kaoken\LaravelMailReset\Mail\MailResetConfirmationToUser::class,
            'table' => 'mail_reset_users',
            'expire' => 1,
        ]
    ],

命令

php artisan vendor:publish --tag=mail-reset

执行后,将添加以下目录和文件。

  • 数据库
    • 迁移
      • 2017_09_21_000001_create_mail_reset_users_table.php
  • 资源
    • 语言
      • en
        • mail_reset.php
      • ja
        • mail_reset.php
    • 视图
      • 供应商
        • 确认
          • 邮件
            • confirmation.blade.php
    • complete.blade.blade.php

迁移

迁移文件 2017_09_21_000001_create_mail_reset_users_table.php 应根据需要修改。

php artisan migrate

添加到内核

将其添加到 app\Console\Kernel.phpschedule 方法。
用于删除第一次注册后超过1小时的用户。

    protected function schedule(Schedule $schedule)
    {
        ...
        $schedule->call(function(){
            MailReset::broker('users')->deleteUserAndToken();
        )->hourly();
    }

电子邮件

在具有上述设置的配置 config\auth.php 中,使用 email_resetKaoken\LaravelMailReset\Mail\MailResetConfirmationToUser::class 作为更改电子邮件时的确认电子邮件。模板使用 views\vendor\mail_reset\mail\confirmation.blade.php。根据应用程序的规格进行更改。

控制器

更改电子邮件地址的示例

<?php
namespace App\Http\Controllers;
use Auth;
use MailReset;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Kaoken\LaravelMailReset\Controllers\MailResetUsers;

class MailResetController extends Controller
{  
    use MailResetUsers;
    /**
     * use trit MailResetUsers
     * @var string
     */
    protected $broker = 'users';

    /**
     * Mail address change view
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function getChangeMail()
    {
        // 各自で用意する
        return view('change_email');
    }
    
    /**
     * Change user's email address
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse|mixed
     */
    public function postChangeMail(Request $request)
    {
        $all = $request->only(['email']);
        $validator = Validator::make($all,[
            'email' => 'required|unique:users,email|max:255|email',
        ]);

        if ($validator->fails()) {
            return redirect('change_email')
                ->withErrors($validator)
                ->withInput();
        }

        switch ( $this->sendMailAddressChangeLink(Auth::guard('customer')->user()->id, $all['email']) ) {
            case MailReset::INVALID_USER:
                redirect('first_register')
                    ->withErrors(['mail_reset'=>'Invalid user.']);
                break;
            case MailReset::SAME_EMAIL_EXIST:
                redirect('first_register')
                    ->withErrors(['mail_reset'=>'The same mail address already exists.']);
                break;
            case MailReset::INVALID_CONFIRMATION:
            default:
                redirect('first_register')
                    ->withErrors(['mail_reset'=>'An unexpected error occurred.']);
        }
        return redirect('change_email_ok');
    }
}

务必在类中写入 use MailResetUsers$broker

路由

来自上述控制器!

Route::group([
        'middleware' => ['auth:user'],
    ],
    function(){
        Route::get('user/mail/reset', 'MailResetController@getChangeMail');
        Route::post('user/mail/reset', 'MailResetController@postChangeMail');
    }
);
Route::get('user/mail/reset/{id}/{email}/{token}', 'MailResetController@getChangeMailAddress');

事件

查看 vendor\kaoken\laravel-email-reset\src\Events 目录内!

ChangedMailAddressEvent

在电子邮件地址完全更改后调用。

MailResetConfirmationEvent

在保存电子邮件地址更改候选者后调用。

许可

MIT