Laravelのパスワード再設定のメールをカスタマイズする
これはなに
公式ドキュメントには手順として簡単なものしかなかったため
Laravelのパスワードリセットのカスタマイズについてメモします。
ResetPasswordNotification.phpでメールアドレスを渡しつつ、
markdownでメールを送信した手順を書き残しておきます。
前提
- Laravel Breezeをインストール済みなど、各種認証APIが実装されているものとします。
- メール送信の設定は済んでいるものとします。
動作確認環境
PHP8.0
Laravel8
Modelの変更
User.phpでsendPasswordResetNotificationメソッドを追加してオーバーライドします。
public function sendPasswordResetNotification($token): void
{
$this->notify(new ResetPasswordNotification($token));
}
Notificationとテンプレートの設定
コマンドでNotificationを作成します。
$ php artisan make:notification ResetPasswordNotification
$tokenを受け取れるようにします。
+ private string $token;
- public function __construct()
+ public function __construct(string $token)
{
+ $this->token = $token;
}
$notifiable->email
でメールアドレスを取得できます。
クエリパラメーターにのせるとフォームの初期値にできるので渡しておきます。
public function toMail(mixed $notifiable): MailMessage
{
$url = urldecode(url('reset-password', $this->token . '?email=' . $notifiable->email));
return (new MailMessage())
->subject('【' . config('app.name') . '】パスワード再設定')
->markdown('mail.passwordreset', ['reset_url' => $url]);
}
続いてmarkdownのテンプレートを作成します。
@component('mail::message')
ボタンを押して、パスワードリセットの手続きを行ってください。
@component('mail::button', ['url' => $reset_url])
パスワードリセット
@endcomponent
----
もしこのメールに心当たりがない場合は破棄してください。
@endcomponent
画面からテンプレートを確認する
いちいちメールを送信せずともブラウザからテンプレートを確認できるようにします。
if (app()->isLocal()) {
Route::get('/forgot-password-email', function () {
$user = new User([
'email' => '[email protected]',
]);
return (new \App\Notifications\ResetPasswordNotification('test_token'))->toMail($user);
});
}
ブラウザから該当パスへアクセスします。問題なく表示できました。
テンプレートにLaravelロゴが表示されている場合は、.env
のAPP_NAMEを 'Laravel'
以外に設定すると置き換えできます。
Author And Source
この問題について(Laravelのパスワード再設定のメールをカスタマイズする), 我々は、より多くの情報をここで見つけました https://qiita.com/gcchaan/items/048140a4106c5b92fae3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .