2016-06-18 34 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