メサイア・ワークス

laravel5.5でパスワードリセットのやり方

laravel5.5でパスワードリセットのやり方

laravelのパスワードリセットは、標準のユーザ認証に最初から実装されている(英語だけど)
パスワードリセットの基本的な流れは以下の通り

1, 以下のURLにアクセスして、既存Userのメールアドレスを入力する
http://laravel55/password/reset

2, こんな感じのメールが来るので、ボタンを押してパスワードリセット画面へ飛ぶ
※日本語化しようとしたら、vendorフォルダ以下にemailテンプレートがあって面倒だった。

3, パスワードリセット画面には、email, 新しいパスワード(&確認用パスワード)がある。
自分のメールアドレス以外はエラーとなる(トークン+メアドでセキュリティを高めている。トークン総当たり対策?)

4, 問題がなければパスワードが上書きされ、ログイン状態でトップページ(/home)にリダイレクトされる

※パスワードリセット系のメッセージを日本語化するには、resources/lang/ja/validate.phpではなく、passwords.phpを生成する
https://readouble.com/laravel/5.5/ja/passwords-php.html

routes/web.php

日本語化
まず、一番気になるのは、URL付きメールの日本語化だよな。
メールテンプレートがどこにあるのか調べてみたら、外出しされていなかった。
vendor/laravel/framework/src/Illuminate/Notifications/resources/views/email.blade.php
ここを直接修正すると、update時に消えるのでダメ~。

既存クラスを継承して、独自クラスを作るか~と思って調べてたら、もっと楽な方法があった(laravel5.3以降)
vendorフォルダ以下のテンプレートファイル(選択式)を、resources/views/vendorフォルダにコピーすると、優先的にそちらが使われるらしい。
https://qiita.com/honeytrap15/items/09a6f68a077fad34658e

こんな感じで、超シンプルにする
resources/views/vendor/notifications/email.blade.php

でも、これだと
送信元=Example
件名=Reset Password
のままなので、処理している所を探したら、またvendorフォルダやん・・・。
vendor\laravel\framework\src\Illuminate\Auth\Notifications\ResetPassword.php

結局、独自通知クラスを作らないとダメっぽいので、諦めて作ろう。
Laravel5のパスワードリセットメールを日本語にする

1, 通知クラスを作る

2, app/User.phpで、パスワードリセット通知クラスを変更する

3, 目的のメールタイトルと送信元を日本語化
App\Notifications\JaPasswordReset;

fromだけなら、config/mail.phpとか.envファイルがデフォルト値で良いのだが、メールタイトルだけは個別だからな…。
mailableクラスも便利なようで微妙だな。

あとは、以下の画像にあった2ファイルを、ちまちま日本語化すればOK!
resources/views/passwords/email.blade.php(メアド入力)
resources/views/passwords/reset.blade.php(確認メアド・新規パスワード入力)

モバイルバージョンを終了