[PHP] login con password_verify - password_hash

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
43
Massa, Italy
Salve non riesco ad far funzionare questa pagina di login:
PHP:
<?php
session_start();
include($_SERVER['DOCUMENT_ROOT']."/inc.php");

if(isset($_POST['submitBtnLogin'])) {
  $email=$_POST['email'];
  $pw=$_POST['password'];
  $password_hash=password_hash($pw, PASSWORD_DEFAULT);

  $stmt = $db->prepare("SELECT * from users WHERE email=? AND password=?");
  $stmt->execute(array($email, $password_hash));
  $row_count = $stmt->rowCount();
  $row = $stmt->fetch();

  if (password_verify($pw, $password_hash)) {


    $_SESSION['login'] = true;
    $_SESSION['sess_user_id']   = $row['id'];
    $_SESSION['sess_user_name'] = $row['username'];
    $_SESSION['sess_name'] = $row['lname'];
    $_SESSION['user_type'] = $row["username_type"];
    redirect("home.php");
  }
  else {
    $error =  "Wrong Username or Password";
  }
}
?>
<!DOCTYPE html>
<html lang="it" dir="ltr">
<head>
  <meta charset="utf-8">
  <title></title>
</head>
<body>
  <?php
  if(isset($error)){ echo '<p class="info_error">'.$error.'</p>';}
  if(isset($msg)){ echo $msg;} else {
    ?>
    <form method="post">
      <table class="loginTable">
        <tr>
          <th>ADMIN PANEL LOGIN</th>
        </tr>
        <tr>
          <td>
            <label class="firstLabel">Email:</label>
            <input type="text" name="email" id="email" value="" autocomplete="off" />
          </td>
        </tr>
        <tr>
          <td><label>Password:</label>
            <input type="password" name="password" id="password" value="" autocomplete="off" /></td>
          </tr>
          <tr>
            <td>
              <input type="submit" name="submitBtnLogin" id="submitBtnLogin" value="Login" />
              <span class="loginMsg"><?php echo @$msg;?></span>
            </td>
          </tr>
        </table>
      </form>
    <?php } ?>
  </body>
  </html>


non mi entra nell'if di password_verify,
avete idea se si scrive cosi i login con password_verify perché in rete trovo poco ma in inglese.

avete idea ?
Grazie mille.
 
Scusa questa parte non ha senso....
PHP:
//hash password da POST
$password_hash=password_hash($pw, PASSWORD_DEFAULT);

//query con Hash da post della password
  $stmt = $db->prepare("SELECT * from users WHERE email=? AND password=?");
  $stmt->execute(array($email, $password_hash));
  $row_count = $stmt->rowCount();
  $row = $stmt->fetch();


  if (password_verify($pw, $password_hash)) {
Già filtri con la query passando l'hash della password, non serve il password_verify()....
 
Leggendo un po' di documentazione, vedo che consigliano di utilizzare password_verify() piuttosto che il confronto diretto.
Quindi forse conviene impostare la query sql solo con la mail e poi fare il controllo della password col password_verify().
 

Discussioni simili