2016-04-17 11 views
0

dbの唯一のユーザーのログインコードを書きます。 しかし、password_verify関数が機能していないようです。 echodbhashpasswordの両方がフォームに書かれていると、私はそれらを見るので、クエリや$_POSTに問題はありません。ハッシュとユーザーのパスワードを持っていても、password_verifyは機能しません

は、ここに私のコードです: ログに:事前に

$passwordFromForm = htmlspecialchars($_POST['password']); 
$nmbr = 12; // it's the user's id. 
$sql = "SELECT * FROM user WHERE iduser = $nmbr"; 
$res = mysqli_query($conn, $sql); 
// $row = mysqli_fetch_assoc($res); 
while($row = $res->fetch_assoc()) { 
    $hashFromDB = $row['hash']; 
} 
if(password_verify($passwordFromForm, $hashFromDB)) { 
    echo "success"; 
    header("Location: ../admin.php"); 
} 
else { 
    echo "The hash is:" . $hashFromDB . "and the pass is:" . $passwordFromForm; 
    //this echoes the correct hash and string 
} 

感謝。

答えて

1

関数password_verify()password_hashと依存している()、あなたは(アルゴリズムpassword_hashを確認することができますが)password_get_info($ハッシュ)と解像度を確認し、)(password_verifyと同じかどうかを使用

+0

ありがとうございます! password_verifyのハッシュがpassword_hashのハッシュと同じ場合はどうなりますか? 同じです。 – TheTryHardz

+0

ここにpassword_get_infoがあります: array [3] {[algo "] => int(1)[" algoName "] =>文字列(6)" bcrypt "[" options "] => array(1){[ "cost"] => int(12)}} – TheTryHardz

1

あなたはやるべきではありませんパスワードをエスケープしてから、password_hash()/password_verify()機能に入力してください。したがって、htmlspecialchars()への呼び出しを削除し、ハッシュを保持するデータベースフィールドがvarchar(255)であることを確認してください。

+0

あなたの答えをありがとう。 私はすでにhtmlspecialchars()なしで試していますが、データベースはVARCHAR(255)ですが、それでも動作しません。 – TheTryHardz

+0

@TheHryz - '$ hashFromDB'の内容の例を挙げることができますか? – martinstoeckli

+0

私のコードでは、$ hashFromDBをエコーすると出力はハッシュ$ 2y $ 10 $ oPHWLB.6Z0hBvjk8al24xuiG7Io4l7ERGCtLnW5Eij1wTlT67mLJWです。 – TheTryHardz

関連する問題