Authユーザーのメールアドレスを変更依頼をし、確認メールの変更先URLへ移動後変更する。
コンテンツの一覧
composer:
composer install kaoken/laravel-email-reset
'providers' => [
...
// 追加
Kaoken\LaravelMailReset\MailResetServiceProvider::class
],
'aliases' => [
...
// 追加
'MailReset' => Kaoken\LaravelMailReset\Facades\MailReset::class
],
'email_reset' => 'users',
を追加する。
[
...
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
// 追加
'email_reset' => 'users',
],
...
]
model
は、ユーザーモデルクラスemail_reset
は、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
実行後、以下のディレクトリやファイルが追加される。
database
migrations
2017_09_21_000001_create_mail_reset_users_table.php
resources
lang
en
mail_reset.php
ja
mail_reset.php
views
vendor
confirmation
mail
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
メソッドへ追加する。
これは、メール変更後24時間過ぎたユーザーを削除するために使用する。
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;
/**
* MailResetUsers トレイトで使用する
* @var string
*/
protected $broker = 'users';
/**
* メールアドレス変更画面
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function getChangeMail()
{
// 各自で用意する
return view('change_email');
}
/**
* ユーザーのメールアドレスを変更する
* @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'=>'無効なユーザーです。']);
break;
case MailReset::SAME_EMAIL_EXIST:
redirect('first_register')
->withErrors(['mail_reset'=>'既に同じメールアドレスが存在します。']);
break;
case MailReset::INVALID_CONFIRMATION:
default:
redirect('first_register')
->withErrors(['mail_reset'=>'予期せぬエラーが発生しました。']);
}
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
ディレクトリ内を参照!
メールアドレスが完全に変更された後に呼び出される。
メールアドレスの変更候補を保存後呼び出される。