2016-06-18 4 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 *と呼ばれていますか? (with t) – ShiraNai7

+0

はい、私はドイツ人ですから。私のテーブルのヘッダーでは、 "passwort"と書かれています。 – Tim

答えて

0

パスワードをハッシュ化し、ユーザーの登録後にデータベースに保存されている場合は、また、ログイン時にユーザーを検証するために、そのハッシュを元に戻す必要があります。 $password = $_POST['password']は、ハッシュを元に戻した後でデータベースと同等です。

+1

''ハッシュ 'を元に戻すことはできません。パスワードをハッシュする理由です。 – chris85

+0

しかし、$ passwordをエコーすると、入力されたパスワードが表示されます。 そして、私が$ user ['passwort']を表示すると、ハッシュされたパスワードが表示されます。 – Tim

+0

ちょうどあなたの質問のトップに投げた重複したターゲットを受け入れてください。マニュアルを読んでください。ロケット科学ではありません。 – Drew

関連する問題