Laravel Hash::check возвращает false, даже если пароль правильный

#laravel #hash

#laravel #хэш

Вопрос:

Это отлично работает в других моих проектах Laravel, но я понятия не имею, почему это не работает в моем новом. Они имеют ту же версию, что и 7.3. Уже пробовал config:clear и cache:clear , но все еще безуспешно

 public function Login(Request $request){
    $username = $request->username;
    $password = $request->password;

    $userQ = User::where('username', $username);
    if ($userQ->exists()) {

        $user = $userQ->first();
        $hashed = $user->Password;

        if (Hash::check($password, $hashed)) {
            // It doesn't get to this part
            $response = array(
                "status" => 1,
                "message" => "Correct"
            );
        } else {
            $response = array(
                "status" => 0,
                "message" => "Invalid credentials"
            );
        }
    } else {
        $response = array(
            "status" => 0,
            "message" => "Username does not exist"
        );
    }

    return response()->json($response);
}
  

$password это обычный текст. $hashed это пароль, который я получил из базы данных. Это мой код jQuery:

 var data = {
            "username": $("#username").val(),
            "password": $("#password").val()
        }
        console.log(data);

        Login(data).then((response) => {
            console.log(response);
            if (!response.status) {
                $("#error-prompt").text(response.message);
            } else {

            }
        }).catch((error) => {
            
        });
  

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

1. Имя $hashed = $user->Password правильное? Возможно, вы опечатались

2. @EncangCutbray нет, все правильно. Я добавил свой код jQuery выше

3. можете ли вы показать, как вы хэшируете пароль для пользователя?

4. @lagbox Оказывается, это потому, что я вводил пустой пароль, в конце концов, что-то не так с моим регистрационным кодом jquery, что поле пароля вводило пустые данные в базу данных

Ответ №1:

Проверьте, существует ли имя пользователя $userQ = User::where('username', $username)->first ()

 if($userQ) {
   if (Hash::check($password, $userQ->Password)) {
       // Password was check
    }
}
  

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

1. Он существует, проблема в том, что Hash::check не работает, несмотря на правильные учетные данные

Ответ №2:

я думаю, что ваша проблема в том, что вы не получили пользователей:

измените это:

  $userQ = User::where('username', $username);
  

к этому:

  $userQ = User::where('username', $username)->first();
  

и вам больше не нужна эта строка:

 $user = $userQ->first();
  

и повторите попытку