1

PHPでcrypt()を使用してユーザーを認証しようとしています。ログインページの私のコードは次のとおりです。

$valid = MemberDB::isValidMember($email_address, $password);
if ($valid == TRUE) {
    $_SESSION['is_valid_member'] = TRUE;
    header("Location: ../welcome/");
    } else {
    $login_message = 'log in';
    include('./view/login.php');
    }

TrueまたはFalseを戻すことになっている関数は次のとおりです。

public static function isValidMember($email_address, $password) {
    $db = Database::getDB();
    $query = "SELECT member_ID, password
              FROM members
              WHERE email_address = :email_address";
    $statement = $db->prepare($query);
    $statement->bindValue(':email_address', $email_address);
    $statement->execute();
    $row = $statement->fetch();
    $statement->closeCursor();
    return $row ? crypt($password, $row['password']) : FALSE;
}

現在、どのパスワードを入力しても、入力できます。$ validでvar_dumpを実行すると、暗号化されたパスワードの98文字の文字列が返されるため、$validがTRUEに等しくないことがわかります。助けてください!

ありがとう。

4

2 に答える 2

2

交換

return $row ? crypt($password, $row['password']) : FALSE;

return $row ? ($row['password'] == crypt($password, $row['password'])) : FALSE;
于 2012-06-27T19:11:39.927 に答える
1

Cryptは、ブール値ではなく、ハッシュされた文字列を返します。そのハッシュされた文字列を既知のハッシュと比較し、それらが同じである場合は返す必要があります。

return $row ? crypt($password, $row['password']) == $row['password'] : FALSE;
于 2012-06-27T19:13:41.480 に答える