2016-06-18 10 views
-6

Я создал страницу входа, но когда код хочет проверить хешированный пароль с введенным паролем, он показал мне сообщение об ошибке.password_verify не работает (password_hash) с руководством пользователя Drew

<?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

, но когда я возвращаю $ password, он показывает мне введенный пароль. И когда я эхо $ user ['passwort'], он показывает мне хешированный пароль. – Tim

+0

Просто примите дублируемую цель, которую я выбрал в верхней части вашего вопроса и сделаю это. И прочитайте руководство. Это не ракетостроение. – Drew

 Смежные вопросы

  • Нет связанных вопросов^_^