2017-07-19 20 views
-1

さて、個人のウェブサイトの登録/ログインコードを作成しようとしています。
登録フォームを作成する際に問題はありませんでしたが、ログインにはいくつかの問題があります。私は私のテーブルから最初の行をフェッチする必要が私の理解にmysql dbからハッシュされたパスワードを選択する方法

 $stmt = $pdo->prepare("SELECT password FROM members where username = ? "); 
    $stmt->bindValue(1, $username); 
    $stmt->execute(); 

は、文字列に変換し、その後でどのようなユーザー入力にその文字列を比較するpassword_verifyを使用して:ここでは
は、私のコードの一部ですフォームiを作成しました。私が持っている問題は、配列をフェッチし、実際にpassword_verifyを使用して文字列と配列を比較できないことです。
何か間違っていますか?私はこれをどうすればいいのですか?
tl; dr実際には、DBからハッシュされたパスワードを選択し、それを文字列に変換し、その文字列をユーザが入力するパスワードと比較する方法を教えてください。
ありがとうございます。

+1

を使用します。あなたは彼らに相談していませんか?編集:これは "はい"または "いいえ"の応答が必要な質問です。あなたは疑問符に気付きましたか? –

+0

これは前に尋ねられたが、私が検索して本当に私の答えを見つけることができなかったのは残念です。また、ほぼ2時間PHPマニュアルを検索していました。あなたは私を正しい方向に向けることができますか? – steve88

+1

['password_verify()'マニュアル... Read it!](http://php.net/manual/en/function.password-verify.php) – RiggsFolly

答えて

1

PHP 5.5以降でこのライブラリの作品は:答えはすべて、このマニュアルにあるpassword_hash

$sql = "SELECT * FROM members WHERE username = ?"; 
$stmt = $pdo->prepare($sql); 
$result = $stmt->execute([$_POST['username']]); 
$users = $result->fetchAll(); 
if (isset($users[0]) { 
    if (password_verify($_POST['password'], $users[0]->password) { 
    // valid login 
    } else { 
    // invalid password 
    } 
} else { 
    // invalid username 
} 
関連する問題