2016-06-18 37 views
-6

我创建了一个登录页面,但是当代码想用输入的密码验证哈希密码时,它向我显示了错误信息。用德鲁的手册password_verify不起作用(password_hash)

<?php 
 
session_start(); 
 
$pdo = new PDO(xxxx); 
 
if(isset($_GET['login'])) { 
 
\t $username = $_POST['username']; 
 
\t $password = $_POST['password']; 
 
\t 
 
\t $statement = $pdo->prepare('SELECT * FROM users WHERE username = :username'); 
 
\t $result = $statement->execute(array('username' => $username)); 
 
\t $user = $statement->fetch(); 
 
\t //verify password 
 
\t if ($user !== false && password_verify($password, $user['passwort'])) { 
 
\t \t $_SESSION['userid'] = $user['id']; 
 
\t \t die('Login succesfull'); 
 
\t } else { 
 
\t \t $errorMessage = "Login error"; 
 
\t } 
 
\t 
 
} 
 

 
if(isset($errorMessage)) { 
 
\t echo $errorMessage; 
 
} 
 
?>

现在我编辑与Drew's manual帮助的代码,但它也不管用。

<?php 
 
session_start(); 
 
$pdo = new PDO(xxxxx); 
 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
 
if(isset($_GET['login'])) { 
 
\t $username = $_POST['username']; 
 
\t $passwort = $_POST['password']; 
 
\t 
 
$query = $pdo->prepare("SELECT * FROM users WHERE username=:username"); 
 
     $query->bindParam(':username', $username); 
 
     $query->execute(); 
 

 
     unset($_SESSION['username']); 
 

 
     if(($row = $query->fetch()) && (password_verify($passwort,$row['passwort']))){ 
 
      $_SESSION['username'] = $row['username']; 
 
      //header("Location: ../../myaccount/myaccount.php"); 
 
      echo "hurray, you authenticated.<br/>"; 
 
     } 
 
     else { 
 
      //header("Location:../../login/login.php "); 
 
      echo "invalid login<br/>"; 
 
     } 
 
} 
 
?>

+0

请确保您有'$ password'和'$ user ['passwort']'的期望值,并且检查您是否在注册码中对密码进行任何字符串操作(即转义)。 – JimL

+0

密码栏真的叫做* passwort *吗? (带t) – ShiraNai7

+0

是的,因为我是德国人。在我的表头iis写上“passwort”。 – Tim

回答

0

如果散列密码,并保存用户注册后的数据库,那么你也应该撤消哈希为了验证在登录用户。您在比较$password = $_POST['password']与撤消哈希后的数据库中的等效值。

+1

你不能'撤销'哈希'。这就是你输入密码的原因。 – chris85

+0

但是当我回显$密码时,它会显示我输入的密码。 而当我回声$ user ['passwort']它显示我哈希密码。 – Tim

+0

只需接受我在问题顶部抛出的重复目标并执行此操作。并阅读手册。这不是火箭科学。 – Drew