コスト値を変更するだけで、このライブラリを使用してハッシュの作成を適切に実装しました。今、私は実際にユーザーを確認することに固執しています。現在のシステムでは、ユーザーがアクティブ化されているかどうかを確認してから、セッションを開始する必要もあります。これは私が持っているものです:
<?php
require('core/init.php');
// Required field names
$required = array('username', 'password');
// Loop over field names, make sure each one exists and is not empty
$error = false;
foreach($required as $field) {
if (empty($_POST[$field])) {
$error = true;
}
}
//This is what will make the password
$form_password = $_POST['password'];
$hash = password_hash($form_password, PASSWORD_BCRYPT);
if ($error) {
echo "Please Check username and password field!";
}
else {
if (password_verify($form_password, $hash)) {
$member_username = $_POST['username'];
$query = $dbh->prepare("SELECT * FROM users WHERE username = :user");
$query->bindParam(':user', $member_username);
$query->execute();
$row = $query->fetch();
if($row['activated'] > 0){
$_SESSION["user_id"] = $row['user_id'];
header("location: login_success.php");
} else {
echo "Account not activated wait for system administrator!";
}
} else {
Echo "Wrong password or username please <a href='index.php'><bold>Retry!</bold></a>";
}
}
私が行ったことは、パスワード検証が実際に真である場合にクエリを実行することです。次に、そのクエリはアクティブ化された行をフェッチして、値が0より大きいかどうかを確認します。大きい場合は、ユーザーはアクティブ化されません。
ただし、私のエラーは、何を入力しても、間違ったパスワードまたはユーザー名を取得し続けることです。再試行してください。
パスワードとユーザーが間違っていないことはわかっています。password_compatの検証部分を適切に実装したかどうかについて、私は2番目に推測しています。
どんな助けでも素晴らしいでしょう。ありがとうございました。
編集 :
コメントでdev-null-dwellerが回答した質問。
問題:ライブラリの$password変数と$hash変数をグローバルとして使用できないことに気づきませんでした。それでそれを修正するために私は変数を作成しました、そしてすべてはうまく働いています。ありがとう!