kaoken / laravel-email-reset
请求更改Auth用户的电子邮件地址,在移动到确认邮件的指定URL后更改。
1.0.3
2018-01-09 09:28 UTC
Requires
- php: >=7.0.0
- laravel/framework: 5.5.*
This package is auto-updated.
Last update: 2024-09-23 16:47:04 UTC
README
请求更改Auth用户的电子邮件地址,在移动到确认邮件的指定URL后更改。
目录表
安装
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.php
的 schedule
方法。
用于删除第一次注册后超过1小时的用户。
protected function schedule(Schedule $schedule) { ... $schedule->call(function(){ MailReset::broker('users')->deleteUserAndToken(); )->hourly(); }
电子邮件
在具有上述设置的配置 config\auth.php
中,使用 email_reset
的 Kaoken\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
在保存电子邮件地址更改候选者后调用。