0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravelのパスワードリセットをカスタマイズする

Posted at

Laravelのパスワードリセットをカスタマイズする

やりたいこと

Laravelのパスワードリマインダーで、パスワードリセット画面でチェック項目を増やす。
ひみつの質問を増やして秘密の質問が合致しているときだけパスワードリセットを動作させる。

pwr2.png

ルートリストを確認

php artisan route:list

でルートを確認

+--------+----------+------------------------+------------------+------------------------------------------------------------------------+------------+
| Domain | Method   | URI                    | Name             | Action                                                                 | Middleware |
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+------------+
|        | POST     | password/reset         | password.update  | App\Http\Controllers\Auth\ResetPasswordController@reset                | web,guest  |
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+------------+

この部分がパスワードリセット処理をするところ。
ResetPasswordControllerのresetメソッドが処理をしている。

ResetPasswordController.phpをみてみる

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;
use Illuminate\Http\Request;

class ResetPasswordController extends Controller
{
    use ResetsPasswords

    /**
     * Where to redirect users after resetting their password.
     * @var string
     */
    protected $redirectTo = '/oreore/mypage';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }
}

reset関数はtraitで
Illuminate\Foundation\Auth\ResetsPasswordsのreset関数が呼ばれる。

ResetPasswordControllerに独自のreset関数を作って、先に自分の処理を実行させる。

ResetPasswordController.phpに以下の様に関数を追加。


    public function reset(Request $request) {
        // カスタマイズしたい処理をここに書く

        // ・・・・ 略 ・・・・

        // オリジナルのパスワードリセットを呼ぶ
        return $this->original_reset($request);
    }

ResetPasswordController.phpのreset関数に別名を付ける。


    // オリジナルのリセット関数に original_reset という名前を付ける
    use ResetsPasswords {
        ResetsPasswords::reset as original_reset;
    }

完成形のResetPasswordController.php


<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;
use Illuminate\Http\Request;

class ResetPasswordController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Password Reset Controller
    |--------------------------------------------------------------------------
    |
    | This controller is responsible for handling password reset requests
    | and uses a simple trait to include this behavior. You're free to
    | explore this trait and override any methods you wish to tweak.
    | このコントローラはパスワードリセットのリクエストを処理する役割を担っており、
    | この動作を含めるためにシンプルな trait を使用しています。この trait を自由に調査し、
    | 調整したいメソッドをオーバーライドすることができます。
    |
    */

    // オリジナルのリセット関数に original_reset という名前を付ける
    use ResetsPasswords {
        ResetsPasswords::reset as original_reset;
    }

    /**
     * Where to redirect users after resetting their password.
     * パスワードリセット後のユーザーのリダイレクト先。
     * @var string
     */
    protected $redirectTo = '/oreore/mypage';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }


    public function reset(Request $request) {
        // カスタマイズしたい処理をここに書く

        // ・・・・ 略 ・・・・

        // オリジナルのパスワードリセットを呼ぶ
        return $this->original_reset($request);
    }
}


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?