Hash:check() 没有返回 Laravel 10 预期的结果

问题描述 投票:0回答:1

我正在 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];
    }
php laravel password-hash
1个回答
0
投票

以下故障排除步骤将有助于解决此问题。

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.';
}

  1. 哈希格式一致性:检查数据库以确保哈希格式正确存储并且未被更改或截断(由于字段大小)。理想情况下我将其设置为 varchar(100) 或更长

  2. 空格或特殊字符:确认密码哈希中没有多余的空格或特殊字符。您是否正在修剪用户请求中的输入?

  3. 确认已检索到用户/记录信息:确认这一段代码

    (Client::where('telf', $telf)->first())
    确实获取了正确的记录,您可以运行dd()来确认该记录。

我认为其中之一应该可以帮助您调试和解决这个问题。 干杯

© www.soinside.com 2019 - 2024. All rights reserved.