PHP のパスワード ハッシュ API を使用して、構築中のサイトのパスワードをハッシュして検証していますが、パスワードを検証しようとすると、常に false が返されます。
データベースに挿入される前にパスワードを設定する User クラスがあります。
public function set__password($passwd) {
self::$password = password_hash($passwd, PASSWORD_BCRYPT, array('cost' => 12));
}
ユーザー名と電子メールが一意の場合、新しいユーザー行が挿入されます。データベースを確認すると、パスワードに有効な BCRYPT 文字列と思われるものがあります。
$2y$12$lTMEP0wevDEMX0bzStzoyOEzOTIAi3Hyhd3nYjGwzbI
パスワードを確認するために、次のスクリプトを実行します。
$username = $_POST['username'];
$password = $_POST['password'];
$DB = Database::getInstance();
// Get the stored password hash
$res = $DB->run__query('SELECT password FROM users WHERE username = "' . $username . '"');
$hash = $res[0]['password'];
// Do the passwords match?
if(password_verify($password, $hash)) {
echo 'success';
} else {
echo 'failed';
}
$hash
上記の文字列に関係しますが、入力フィールドから取得した平文のパスワードがpassword_verify($password, $hash)
where is であると呼び出すと、常に false の値が返されます。$password