Разрешить вход только для активных пользователей

#php #laravel #authentication #laravel-8

Вопрос:

Мне нужно разрешить вход только для разрешенных пользователей, это мой контроллер:

 class LoginController extends Controller
{
    public function index()
    {
        return view('login');
    }

    public function login(Request $request)
    {
        $credentials = $request->only('user', 'password');

        if (!Auth::attempt($credentials)) {
            return back()->with('error', 'Usuario o Contraseña Invalidos!');
        } else if (Auth::user()->status != 1) {
            return back()->with('error', 'Usuario no autorizado');
        }

        $request->session()->regenerate();

        return redirect('home');
    }

    public function logout(Request $request)
    {
        Auth::logout();
        $request->session()->regenerate();
        return redirect('/login');
    }
}
 

это работает, но это позволяет всем пользователям, даже тем, у кого статус = 0, что я делаю не так?

спасибо за вашу помощь…

Комментарии:

1. Похоже, вы путаете представление «вход» и метод контроллера «вход».

2. Я не понял вашего комментария, где я путаю представление с контроллером?

3. В методе контроллера «индекс» return view('login'); , который вернет представление «вход» без проверки подлинности, и public function login(Request $request) это отдельный метод контроллера.

4. Этот случай уже приведен в документах

Ответ №1:

Auth::attempt примите дополнительные условия запроса к запросу аутентификации в дополнение к электронной почте и паролю пользователя.

 if (Auth::attempt(['email' => $email, 'password' => $password, 'status' => 1])) {
    // Authentication was successful...
}
 

Ответ №2:

В свой логинконтроллер добавьте это:

 protected function credentials(IlluminateHttpRequest $request)
{
    //return $request->only($this->username(), 'password');
    return [$this->username() => $request->{$this->username()}, 'password' => $request->password, 'status' => 1];
}
 

Комментарии:

1. Пожалуйста, добавьте контекст к вашему ответу, чтобы помочь тем, кто понимает ваш ответ и как он применим к заданному вопросу.