我正在 Laravel 10 项目中训练在不登录的情况下检查密码验证,但函数“check”返回 false,而且,我可以使用相同的密码登录。我不知道为什么返回 false。
谢谢。
public function recharge_by_client(Request $request){
$telf = $request->telf;
$password = $request->password;
$credit = $request->credit;
try {
$client = Client::where('telf', $telf)->first();
//if verification data is false, returning 0.
if ($client && Hash::check($password, $client->password)) {
\Log::info('Entramos a update');
HomeHelper::recharge_money($client->id, $credit);
}else{
\Log::info('NO entramos a update');
return ['credit_updated' => 0];
}
} catch (\Exception $e) {
\Log::info($e->getMessage());
//A exception has ocurre, returning 0.
return ['credit_updated' => 0];
}
//Returning current credit.
return ['credit_updated' => Client::find($client->id)->credit];
}
以下故障排除步骤将有助于解决此问题。
1 尝试使用已知值进行测试: 您应该能够通过使用已知值测试
Hash::check()
来重现这一点。
使用测试路径,您可以手动散列密码,然后尝试使用相同的密码对其进行检查,以查看 Hash::check() 是否仍然返回 false。这是一个可以帮助解决这个问题的示例代码。
$knownPassword = 'password123';
$hashed = Hash::make($knownPassword);
if (Hash::check($knownPassword, $hashed)) {
echo 'Password check succeeded.';
} else {
echo 'Password check failed.';
}
哈希格式一致性:检查数据库以确保哈希格式正确存储并且未被更改或截断(由于字段大小)。理想情况下我将其设置为 varchar(100) 或更长
空格或特殊字符:确认密码哈希中没有多余的空格或特殊字符。您是否正在修剪用户请求中的输入?
确认已检索到用户/记录信息:确认这一段代码
(Client::where('telf', $telf)->first())
确实获取了正确的记录,您可以运行dd()来确认该记录。
我认为其中之一应该可以帮助您调试和解决这个问题。 干杯