例えば、会員情報の審査中だったり、ログイン準備中でまだログインして欲しくない時など
ログインエラーの表示ではなく、メッセージを表示させたい場合の方法。
実際のログイン処理は、/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)