0

password_verify 関数に問題があります。登録は機能していますが、ログインに使用しようとすると、奇妙な理由で間違っていると表示されます。

これが私のコードです(判断しないでください、私はまだすべてにかなり慣れていません。

$username = $_POST['username'];
$password = $_POST['password'];
$SQLSelect = $odb -> prepare("SELECT * FROM `users` WHERE `username` = :username");
$SQLSelect -> execute(array(':username' => $_POST['username']));
while ($show = $SQLSelect -> fetch(PDO::FETCH_ASSOC))
{
$passwordHash = $show['password'];
}
$date = strtotime('-1 hour', time());
$attempts=$odb->query("SELECT COUNT(*) FROM `loginlogs` WHERE `ip` = '$ip' AND `username` LIKE '%failed' AND `date` BETWEEN '$date' AND UNIX_TIMESTAMP()")->fetchColumn(0);

//Check fields
if (empty($username) || empty($password) || !ctype_alnum($username) || strlen($username) < 4 || strlen($username) > 15)
{
die(error('Please fill in all fields.'));
}

//Check login details
echo $passwordHash;
$SQLCheckLogin = $odb -> prepare("SELECT COUNT(*) FROM `users` WHERE `username` = :username AND `password` = :password");
$SQLCheckLogin -> execute(array(':username' => $username, ':password' => password_verify($password, $passwordHash)));
$countLogin = $SQLCheckLogin -> fetchColumn(0);
if (!($countLogin == 1))
{
$SQL = $odb -> prepare("INSERT INTO `loginlogs` VALUES(:username, :ip, UNIX_TIMESTAMP(), 'XX')");
$SQL -> execute(array(':username' => $username." - failed",':ip' => $ip));
die(error('Username or password are invalid.'));

なぜこれが機能しないのか、誰にも手がかりがありますか? 私はすべてを再確認しましたが、問題ないはずです。また、echo $passwordHash は、正常に機能するパスワードを取得できたかどうかを確認するだけでした。:/

4

1 に答える 1

1

password_verify($password, $passwordHash)これはブール値を返します。あなたがすべきことは、パスワードがハッシュと一致することを確認するためにそれを使用することです. これをすべて削除します。

$SQLCheckLogin = $odb -> prepare("SELECT COUNT(*) FROM `users` WHERE `username` = :username AND `password` = :password");
$SQLCheckLogin -> execute(array(':username' => $username, ':password' => password_verify($password, $passwordHash)));
$countLogin = $SQLCheckLogin -> fetchColumn(0);
if (!($countLogin == 1))

そして、単にこれを行います:

if (!password_verify($password, $passwordHash)) {
    // ...
    die(error('Username or password are invalid.'));
}
于 2016-02-28T00:58:24.537 に答える