2020年11月18日水曜日

laravel user password reset際、登録済みemailのチェック条件

 laravelデフォルトuser table softdelete以外のemailですでに登録済みユーザーかどうか判断する。追加条件で登録済みユーザーを判断したい場面もでてくる。その際、sendResetLinkEmail functionをoverwriteすれば良い。


下記のように、app\Http\Controllers\Auth\ForgotPasswordController.php はtrait SendsPasswordResetEmails(vendor\laravel\framework\src\Illuminate\Foundation\Auth\SendsPasswordResetEmails.php)を使用している。


use SendsPasswordResetEmails


登録済みのemailかどうかについて、sendResetLinkEmail functionの中で行っている。


/**

 * overwrite SendsPasswordResetEmails function in ForgotPasswordController.php

 */

public function sendResetLinkEmail(Request $request)

    {

        $this->validateEmail($request);

        $request->merge(['type' => 0]); // 条件追加:type 0のユーザーのみ登録済みかどうか判断

       

        $response = $this->broker()->sendResetLink(

            $request->only('email', 'type') // ここでemail以外、type値も追加

        );

        return $response == Password::RESET_LINK_SENT

                    ? $this->sendResetLinkResponse($request, $response)

                    : $this->sendResetLinkFailedResponse($request, $response);

    }