Laravel Hash::check即使密码正确也会返回false



这在我的其他Laravel项目中运行良好,但我不知道为什么在我的新项目中不起作用。它们的版本相同,即7.3。已经尝试过config:clearcache: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) => {

});

检查用户名是否存在$userQ = User::where('username', $username)->first ()

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

我认为你的问题在于你没有得到用户:

更改此项:

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

到此:

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

您不再需要这条线路:

$user = $userQ->first();

然后重试

最新更新