Laravel7 ログインにカスタムバリデーションを追加する方法

例えば、会員情報の審査中だったり、ログイン準備中でまだログインして欲しくない時など
ログインエラーの表示ではなく、メッセージを表示させたい場合の方法。

実際のログイン処理は、/vendor/laravel/ui/auth-backendフォルダのAuthenticatesUsersトレイトに書かれているのでAuthenticatesUsers.phpを開く。
loginメソッドをコピーして、app/Http/Controllers/User/Auth/LoginController.phpに貼り付ける。

あとは、カスタムバリデーションを追加する方法と同じ。

/app/Rules/User/IsApplyingRule.php

<?php

namespace App\Rules\User;
use App\Models\Member;

use Illuminate\Contracts\Validation\Rule;

class IsApplyingRule implements Rule
{

    private $email;

    public function __construct($email)
    {
        $this->email = $email;
    }

    public function passes($attribute, $value)
    {

        $member = Member::where('email', $this->email)
            ->first();
        
        if($member->status == 0) return false;

        return true;
    }

    public function message()
    {
        return 'ただいま準備中です。';
    }

}

/app/Http/Requests/User/LoginRequest.php

<?php

namespace App\Http\Requests\User;

use Illuminate\Foundation\Http\FormRequest;
use App\Rules\User\IsApplyingRule;

class LoginRequest extends FormRequest
{

    private $email;

    public function authorize()
    {
        return true;
    }

    public function all($keys = null)
    {
        $results = parent::all($keys);
        $this->email = $results['email'];

        return $results;
    }

    public function rules()
    {
        return [
            'email' => [
                new IsApplyingRule(
                    $this->email
                )
            ],
        ];
    }
}

/app/Http/Controllers/User/Auth/LoginController.php

+use App\Http\Requests\User\LoginRequest;

-    public function login(Request $request)
+    public function login(LoginRequest $request)

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です