password_verfiy () возвращает false с правильными учетными данными - PullRequest
0 голосов
/ 30 мая 2018

Итак, я создаю простую страницу входа в систему, я использовал этот точный код в другом проекте, и он отлично работает, теперь по какой-то причине он не работает.Я предполагаю, что упускаю что-то очевидное, но через 1 час я не могу найти это.

Версия PHP: 7.2.5

Страница входа в систему:

<?php require "../db.php";

$username = $password = "";

 if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = mysqli_real_escape_string ( $con,  $_POST['username']);
$password = mysqli_real_escape_string ( $con,  $_POST['password']);

$hash = $con->query("SELECT password FROM users WHERE username = '$username'")->fetch_object()->password;

print_r($password);?><br><?php

$hash2 = password_hash($password, PASSWORD_DEFAULT);
echo $hash2;?><br><?php

print_r($hash);?><br><?php



var_dump(password_verify($password, $hash));

// if (password_verify($password, $hash)) {
//   session_start();
//   $_SESSION['username'] = $username;
//   header("Location: ../seldep.php");
//   die();
// }
// else {
//   header("Location: ../index.php?1");
//   die();
// }
}
?>

Прямо сейчас есть много тестового кода для его тестирования.

Если я создаю новую учетную запись и пытаюсь войти в систему, она возвращает false, но я изменяю ее так, что она берет пароль, введенный пользователем при входе в систему, и хеширует его в том же файле и помещает его через password_verify, он возвращаетправда.Это должно быть точно так же, но это не работает.Есть ли какие-либо очевидные проблемы здесь?

Редактировать: Вот вывод при попытке войти в систему с именем пользователя: 5 и паролем: 5 (Это в базе данных и было просто зарегистрировано.)

$2y$10$wjvfZh5EQPoXDGt89JfyXOA2TMq4MfvAQHNPXte939BcH.9y.3Ecm
 $2y$10$L2horMNAcXETSvOPQDCaMOoXtie3VQ4rRWhLhj5OK5.2sqHCnzRWK
  $2y$10$uuQshjMaeepm6aY8.4lBne88tFo5oKem54wztm.dLXT
   bool(false)
    5 

Обновление с формой:

<form action="accounts/login.php" method="post">
    <div  class="z-depth-3 y-depth-3 x-depth-3 grey green-text lighten-4 
         row" style="display: inline-block; padding: 32px 48px 0px 48px; 
     border: 1px; 
      margin-top: 100px; solid #EEE;">
    <div class="section"></div>
    <div class="section"></div>

          <h1 class="grey-text" style="font-size: 20px;"> <?php echo 
           CLAN_NAME; ?> </h1>

        <div class='row'>
        <h1 class="grey-text" style="font-size: 20px;"> LOGIN </h1>
          <div class='input-field col s12'>
            <input class='validate' type="text" name='username' required />
            <label for='email'>Username</label>
          </div>
        </div>
        <div class='row'>
          <div class='input-field col m12'>
            <input class='validate' type='password' name='password' required 
              />
            <label for='password'>Password</label>
          </div>
          <label style='float: right;'>
          <b style="color: #F5F5F5;">Forgot Password?</b>
          </label>
        </div>
        <br/>
        <center>
          <div class='row'>
            <button style="margin-left:75px;"  type='submit'                 
            name='btn_login' class='col  s6 btn btn-small white black-text  
            waves-effect z-depth-1 y-depth-1'>Login</button>
          </div>
          <div class='row'>
            <a href="accounts/register.php" style="margin-left:75px;" 
            class='col  s6 btn btn-small white black-text  waves-effect z- 
            depth-1 y-depth-1'>Request access</a>
          </div>
        </center>

    </div>
  </form>

Плохо, вот, пожалуйста: (ОБНОВЛЕНИЕ / РЕДАКТИРОВАТЬ)

<?php require "../db.php" ?>
 <?php session_start(); ?>

 <?php

 $username = $email = $password = $password2 = "";

 if ($_SERVER["REQUEST_METHOD"] == "POST") {
 $username = mysqli_real_escape_string ( $con,  $_POST['username']);
 $email = mysqli_real_escape_string ( $con,  $_POST['email']);
  $password = mysqli_real_escape_string ( $con,  $_POST['password']);
 $password2 = mysqli_real_escape_string ( $con,  $_POST['password2']);

if ($password == $password2) {
$hash = password_hash($password2, PASSWORD_DEFAULT);

$sql = "INSERT INTO users (username, email, password)
VALUES ('$username', '$email', '$hash')";

if ($con->query($sql) === TRUE) {
  header("Location: register.php?rg");
  die();
  } else {
      echo "Error: " . $sql . "<br>" . $con->error;
  }
  } else {
  header("Location: register.php?passwordDontMatch");
   }
 }

 ?>

Обновлено с формой регистра:

<form action="registerdone.php" method="post">
   <div class="z-depth-3 y-depth-3 x-depth-3 grey green-text lighten-4 row" style="display: inline-block; padding: 32px 48px 0px 48px; border: 1px; margin-top: 100px; solid #EEE;">
   <div class="section"></div>
   <div class="section"></div>
       <div class='row'>
       <h1 class="grey-text" style="font-size: 20px;"> REQUEST ACCESS </h1>
       <!-- Defining the username -->
         <div class='input-field col s12'>
           <input class='validate' type="text" name='username' id='email' required />
           <label for='email'>Username</label>
         </div>
         <!-- Defining the email -->
         <div class='input-field col s12'>
           <input class='validate' type="text" name='email' id='email' required />
           <label for='email'>Email</label>
         </div>
       </div>
       <div class='row'>
         <!-- Defining the password -->
         <div class='input-field col m12'>
           <input class='validate' type='password' name='password' id='password' required />
           <label for='password'>Password</label>
         </div>
         <!-- Confirming the passwords matching -->
         <div class='input-field col m12'>
           <input class='validate' type='password' name='password2' id='password' required />
           <label for='password'>Confirm password</label>
         </div>
       </div>
       <br/>
       <center>
         <div class='row'>
           <button style="margin-left:75px;"  type='submit' name='btn_login' class='col  s6 btn btn-small white black-text  waves-effect z-depth-1 y-depth-1'>Request access</button>
         </div>
         <div class='row'>
           <a href="../index.php" style="margin-left:75px;" class='col  s6 btn btn-small white black-text  waves-effect z-depth-1 y-depth-1'>Login page</a>
         </div>
       </center>

   </div>
 </form>

Обновление с выводом из этого:

$hash = password_hash($password, PASSWORD_DEFAULT);
print_r($hash);?><br><?php
var_dump($hash);?><br><?php
$hash2 = password_hash($password2, PASSWORD_DEFAULT);
print_r($hash2);?><br><?php
var_dump($hash2);?><br><?php
die();

вывод выглядит следующим образом:

string(60) "$2y$10$VECqLlJwpndtDSv3r/U4z.4JsIZjXoFUuj7ALkzlFQuTeUKVcK/ze" 
$2y$10$x8MLKNwcvbhY7AoYxPiFyOaEazE2rfS2nbqVetATATuH1QpnwLa96
string(60) "$2y$10$x8MLKNwcvbhY7AoYxPiFyOaEazE2rfS2nbqVetATATuH1QpnwLa96" 
$2y$10$VECqLlJwpndtDSv3r/U4z.4JsIZjXoFUuj7ALkzlFQuTeUKVcK/ze
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...