[ad_1]
データベースでハッシュされたユーザーパスワードがあります。 password_verify メソッドを使用して、ユーザーがデータベースに保存されているものに入力したパスワードを確認したい。 ただし、正しいパスワードを入力すると、コーディングが「失敗」し続けます。 最後に、コードがデータベースからデータをフェッチしない理由がわかりません。
私が試したこと:
PHP
<pre> <?php require_once 'includes/connection.php'; require_once 'includes/filter.php'; require_once 'includes/header.php'; if ($_SERVER['REQUEST_METHOD'] == 'POST') { $email; $password; if (empty($_POST['email']) || empty($_POST['password'])) { echo "<span>All fileds are required</span>"; } else { $email = $_POST['email']; $password = $_POST['password']; $query = "SELECT * FROM register_user WHERE email = :email AND user_password = :user_password"; $statement = $pdo->prepare($query); $statement->bindParam(':email', $filterEmail, PDO::PARAM_STR); $statement->bindParam(':user_password', $filterPassword, PDO::PARAM_STR); $statement->execute(); $row = $statement->fetch(PDO:: FETCH_ASSOC); if(password_verify($password, $row['email'] ?? 'default')) { echo "Success"; } else { echo 'failed'; } } } ?>
解決策 1
引用:PHP$query = "SELECT * FROM register_user WHERE email = :email AND user_password = :user_password";
ユーザーが入力した場合、クエリはレコードのみを返します 塩漬けのハッシュ 「パスワード」フィールドに自分のパスワードを入力します。
引用:PHPif(password_verify($password, $row['email'] ?? 'default')) {
の password_verify
方法[^] ユーザーが入力した場合にのみ成功します 塩漬けハッシュの塩漬けハッシュ 登録時にパスワードをメールアドレスとして使用します。
したがって、あなたのコードは 一度もない ログインできるようにします。
純粋に電子メール アドレスに基づいて、データベースからユーザーを選択する必要があります。 クエリが成功し、行が返されることを確認する必要があります。 また、ハッシュ化されたパスワードをデータベースから password_verify
方法、 いいえ メールアドレス。
コメントで指摘されているように、クエリ パラメータに対して既に定義した変数を使用する必要があります。
PHP
<?php require_once 'includes/connection.php'; require_once 'includes/filter.php'; require_once 'includes/header.php'; if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (empty($_POST['email']) || empty($_POST['password'])) { echo "<span>All fileds are required</span>"; } else { $email = $_POST['email']; $password = $_POST['password']; $query = "SELECT * FROM register_user WHERE email = :email"; $statement = $pdo->prepare($query); $statement->bindParam(':email', $email, PDO::PARAM_STR); if ($statement->execute() && $row = $statement->fetch(PDO:: FETCH_ASSOC) && password_verify($password, $row['user_password'])) { echo "Success"; } else { echo 'failed'; } } } ?>
[ad_2]
コメント