2017-02-11 12 views
0

でパスワードを確認することはできません、私は、ユーザーが通常いかなる誤りまたはなしでログインし、ログイン時にパスワードは、このプロジェクトではPHP

オフハッシュを作るためにbcryptのを使用しますが、変更しようとしたときましたあなたのパスワード、現在のパスワードはここで、データベースのパスワードを使用してマッチ(もちろん私は2つのパスワードを確認するためにpassword_verify()を使用しています)

は、私のコードのスニペットではありません。

$option = ['cost' => 12]; 
    $password = password_hash($_currentpassword, PASSWORD_BCRYPT, $option); 

    $selectpasswordsql = "SELECT `password` FROM `auth` WHERE username=?"; 
    $selectpasswordstmt = $conn->prepare($selectpasswordsql); 
    $selectpasswordstmt->execute(array($_SESSION['account']['username'])); 
    $selectpasswordresults = $selectpasswordstmt->fetch(PDO::FETCH_ASSOC); 

    $databasepass = $selectpasswordresults['password']; 
    $databasepass = trim($databasepass); 
    if(password_verify($password,$databasepass)){ 
    if(empty($passmsgs)){ 
     $updatepasssql = "UPDATE `auth` SET 
     `password`=? 
     WHERE username=? 
     "; 
     $updatepassstmt = $conn->prepare($updatepasssql); 
     $updatepassstmt->execute(array($password, $_SESSION['account']['username'])); 
     if($updatepassstmt){ 
     array_push($passmsgs, 'Successfully updating your password!'); 
     } else { 
     array_push($passmsgs, 'There was a problem executing your command!'); 
     } 
    } 
    } else { 
    array_push($passmsgs, 'Your current password is wrong!'); 
    } 

これを試すには、パスワード


編集で現在のパスワードと一致しないのエラーが発生します:はい、私は

編集2の最大の長さとVARCHARを使用しています:私のコードの完全なコピーにはlinkがあります。

答えて

3

$_currentpassword変数を2行目にハッシュする必要はありません。

変数をpassword_verify関数に渡すだけで、関数自体がその仕事を行います。

+0

password_verifyは私の 'current_password'をハッシュしますので、本当に必要です。なぜあなたはそれが必要ではないと思いますか? – astronomicalXoom

+0

私は自分のコード全体を見るためのリンクを追加しました。もしあなたが – astronomicalXoom

+0

の 'password_varify'を実行する必要があるなら、それをチェックしてください。パスワードを外部からハッシュする必要はありません。 DBからユーザーが入力したパスワードと古いパスワードを渡すだけで動作します。 more:[password_varify](http://php.net/manual/en/function.password-verify.php) –

関連する問題