2016-06-18 1 views
-6

로그인 페이지를 만들었지 만 입력 된 암호로 해시 된 암호를 확인하려고 할 때 오류 메시지가 나타납니다. Drew의 설명서와 함께 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의 도움으로 코드를 편집 할 수 있지만 그 중 하나가 작동하지 않습니다.

+0

'$ password'와'$ user [ 'passwort']'에 예상되는 값을 가지고 있는지 확인하고, 등록 코드에서 문자열 조작 (즉, 이스케이프)을하지 않았는지 확인하십시오. – JimL

+0

암호 열은 실제로 * passwort *라고되어 있습니까? (with a) – ShiraNai7

+0

예, 왜냐하면 저는 독일인입니다. 내 테이블 헤더에서 "passwort"라고 쓰여 있습니다. – Tim

답변

0

암호를 해시 및 사용자 등록 후 데이터베이스에 저장 한 경우

<?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/>"; 
 
     } 
 
} 
 
?>

, 당신은 로그인시 사용자를 확인하기 위해 그 해시를 취소해야한다. $password = $_POST['password']은 해시를 실행 취소 한 후 데이터베이스와 동일합니다.

+1

'해시'를 '취소'할 수 없습니다. 그래서 암호를 해시하는 것입니다. – chris85

+0

하지만 $ password를 표시하면 입력 한 암호가 표시됩니다. 그리고 $ user [ 'passwort']를 출력하면 해쉬 된 패스워드를 보여줍니다. – Tim

+0

질문의 맨 위에 던진 중복 대상을 수락하고 그렇게하십시오. 그리고 설명서를 읽으십시오. 그것은 로켓 과학이 아닙니다. – Drew

관련 문제