Laravel Проверка авторизации авторизации редактирования - PullRequest
1 голос
/ 31 марта 2020

Я хочу отредактировать мою laravel форму входа. Основная проблема, если я ввожу данные в поля электронной почты и пароль (адрес электронной почты правильный, но пароль неверный). Я получаю сообщение об ошибке, которое указывает, что адрес электронной почты неправильный, а не пароль ... Я нашел решение, отредактируйте этот метод в AutenticatesUsers. php. От:

protected function sendFailedLoginResponse(Request $request)
{
    throw ValidationException::withMessages([
        $this->username() => [trans('auth.failed')],
    ]);
}

Кому:

protected function sendFailedLoginResponse(Request $request)
{
    throw ValidationException::withMessages([
        $this->username() => [trans('auth.failed')],
        'password' => [trans('auth.failed_password')],
    ]);
}

Но теперь, если я сделаю одну ошибку, независимо от того, где я получил обе ошибки ... Как я могу это исправить? Мне нужна хорошая проверка входных данных.

Отредактировано: я перезаписываю метод sendFailedLoginResponse следующим образом:

protected function sendFailedLoginResponse(Request $request)
{
    $user = User::where($this->username(), $request->{$this->username()})->first();

    if(\Hash::check($request->$this->username(), $user->email)){
        throw ValidationException::withMessages([
            $this->username() => [trans('auth.failed')],
        ]);
    } else{
        throw ValidationException::withMessages([
            'password' => [trans('auth.failed_password')],
        ]);
    }
}

, но теперь я получаю эту ошибку: Объект класса App \ Http \ Controllers \ Auth \ LoginController не может быть преобразован в строку

PS Извините, если вопросы глупы, я новичок во всем этом Laravel и OOP вещи ...

1 Ответ

0 голосов
/ 01 апреля 2020

Для этой цели вы бы использовали саму проверку, вы должны изменить ValidateLogin следующим образом:

 $request->validate([                                                                                                                                                                                                                                                           
              $this->username() => 'bail|required|string|exists:users,username',                                                                                                                                                                                                                                    
              'password' => 'required|string',                                                                                                                                                                                                                                           
          ]);

С этим изменением, если имя пользователя не существует в вашей базе данных laravel выдаст исключение, которое показывает имя пользователя не существует Поэтому, когда ваш поток достигнет sendFailedLoginResponse, вы будете уверены, что просто неверный пароль, и вы можете выбросить исключение только для пароля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...