2016-08-01 3 views
2

У меня есть 2 проекта 1 для проверки имени пользователя и пароля, если они существуют в базе данных, которая имеет функцию password_verify(), а другая может зарегистрироваться и войти в систему, но в этом 1 функция password_verify всегда возвращает false, даже думал, что у меня есть тот же код, написанный в обоих, но изменил имя таблицы, я опубликую проект, поэтому, если кто-нибудь может мне помочь, пожалуйста. Я проверил, что он обычно подключается к базе данных и возвращает результат электронной почты, но когда дело доходит до сравнения хэшированного прохода с введенным, оно всегда ложно.PHP password_verify return false

Index.php главная страница и содержит только две строки: PHP

  1. включают ("signup.php");
  2. включают ("login.php");

connection.php

<?php 
$server="localhost"; 
$db_username="myusername"; 
$db_password="mypassword"; 
$db="test_db"; 

$conn=mysqli_connect($server,$db_username,$db_password,$db); 


if(!$conn) 
    die ("Connection Failed: ".mysqli_connect_error()); 


?> 

signup.php

<?php 
session_start(); 
if(isset($_POST['signup'])) 
{ 
    function validateFormData($formData) 
    { 
     $formData=trim(stripcslashes(htmlspecialchars($formData))); 
     return $formData; 
    } 

    $email=validateFormData($_POST['email']); 
    $password=validateFormData($_POST['password']); 

    if(!$_POST['email']) 
     $error.="Please enter an email<br>"; 

    else if(!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)) 
    { 
     $error.="Please enter a valid email<br>"; 
    } 

    if(!$_POST['password']) 
     $error.="Please enter a password<br>"; 

    else 
    { 
     if(strlen($_POST['password'])<8) 
      $error.="Password must contain at least 8 characters<br>"; 

     if(!preg_match('`[A-Z]`',$_POST['password'])) 
      $error.="Password must contain at least one capital letter<br>"; 
    } 

    if($error) 
    { 
     echo "<div class='alert alert-danger text-center lead'><a class='close red' data-dismiss='alert'>&times;</a>".$error."</div>"; 
    } 
    else 
    { 
     include('connection.php'); 

     $query="SELECT * FROM `diary` WHERE email='".mysqli_real_escape_string($conn,$email)."'"; 

     $result=mysqli_query($conn,$query); 
     $results=mysqli_num_rows($result); 

     if($results) 
      echo "<div class='alert alert-danger text-center lead'>This email already exists, do you want to log in?<a class='close red' data-dismiss='alert'>&times;</a></div>"; 

     else 
     { 
     $selectUser=mysqli_real_escape_string($conn,$email); 
     $hashedPass=password_hash($password,PASSWORD_DEFAULT); 
     $query="INSERT INTO `diary`(`email`, `password`) VALUES ('$selectUser','$hashedPass')"; 
     mysqli_query($conn,$query); 
     echo "<div class='alert alert-success text-center lead'>You've been signed up!<a class='close green' data-dismiss='alert'>&times;</a></div>"; 

     $_SESSION['id']=mysqli_insert_id($conn); 


     } 
} 

} 


?> 

login.php

<?php 

if(isset($_POST['login'])) 
{ 


    function validateFormData($formData) 
    { 
     $formData=trim(stripcslashes(htmlspecialchars($formData))); 
     return $formData; 
    } 


    $formEmail=validateFormData($_POST['loginEmail']); 
    $formPass=validateFormData($_POST['loginPassword']); 
    $newPass=password_hash($formPass,PASSWORD_DEFAULT); 
    echo $newPass; 

    include("connection.php"); 

    $query="Select * from diary where email='$formEmail' "; 

    $result=mysqli_query($conn,$query); 

     if(mysqli_num_rows($result)>0) 
    { 
     while($row=mysqli_fetch_assoc($result)) 
     { 
      $LogEmail= $row['email']; 
      $LogPass= $row['password']; 
      echo "<br>".$LogPass; 

     } 
     if(password_verify($newPass,$LogPass)) 
     { 
      echo "<br>Correct Password";  
     } 
      else 
       echo "<br>Not Correct"; 
    } 


} 

?> 

выход $ новый_пароль является: "$ 2y $ 10 $ dw0AtEExMc41p4nUB3W9kOOWTcNZmQev9jM4emNn7oQNODfu6Ld.q"

выход $ LogPass является: "$ 2y $ 10 $ biz6Z5nxsMZXNf7p3ebqw.pksPb1VhWEmoan776rMqOC7VcFRQbrK"

Index

<?php 

include("signup.php"); 
include("login.php"); 

?> 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <meta name="description" content=""> 
    <meta name="author" content=""> 
    <title>Secret Diary</title> 

    <link rel="stylesheet" href="css/Normalize.css"> 
    <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css"> 
    <link rel="stylesheet" href="css/style.css"> 

    <!--[if IE]> 
     <script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script> 
     <script src="https://cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script> 
    <![endif]--> 

</head> 

<body> 
    <div class="container"> 
     <form class="form-horizontal emailForm" role="form" method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"> 
      <legend><h1 class="text-center">Sign Up</h1></legend> 
     <div class="form-group"> 
      <label class="control-label col-sm-2" for="email" >Email:</label> 
      <div class="col-sm-10"> 
      <input type="email" class="form-control" style="width:90%" id="email" placeholder="Enter Email" name="email" value="<?php echo addslashes($_POST['email']);?>"> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label class="control-label col-sm-2" for="pwd">Password:</label> 
      <div class="col-sm-10"> 
      <input type="password" class="form-control" style="width:90%" id="pwd" placeholder="Password" name="password"> 
      </div> 
     </div> 
     <div class="form-group"> 
      <div class="col-sm-offset-2 col-sm-10"> 
      <button type="submit" class="btn btn-success " id="btnClick" name="signup">Sign Up</button> 
      </div> 
     </div> 
     </form><!--SIGN UP--> 

     <form class="form-horizontal emailForm" role="form" method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"> 
      <legend><h1 class="text-center">Log In</h1></legend> 
     <div class="form-group"> 
      <label class="control-label col-sm-2" for="LogInEmail" >Email:</label> 
      <div class="col-sm-10"> 
      <input type="email" class="form-control" style="width:90%" id="LogInEmail" placeholder="Enter Email" name="loginEmail" value="<?php echo addslashes($_POST['loginEmail']);?>"> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label class="control-label col-sm-2" for="LogInPassword">Password:</label> 
      <div class="col-sm-10"> 
      <input type="password" class="form-control" style="width:90%" id="LogInPassword" placeholder="Password" name="loginPassword"> 
      </div> 
     </div> 
     <div class="form-group"> 
      <div class="col-sm-offset-2 col-sm-10"> 
      <button type="submit" class="btn btn-success " id="btnClick" name="login">Log In</button> 
      </div> 
     </div> 
     </form><!--LOG IN--> 
</div> 
    <script src="js/JQuery.min.js"></script> 
    <script src="bootstrap/js/bootstrap.min.js" type="text/javascript"></script> 
    <script src="js/script.js" type="text/javascript"></script> 
</body> 
</html> 
+0

я попытался его без этой функции, но все тот же –

+0

я может отправить u в этот проект, он только зарегистрировался и зарегистрировался, может быть, вы сможете получить более полное представление о том, что может быть проблемой –

+0

хэш для пароля, который я проверил. –

ответ

1

Вы переписываете свой $password, когда включаете свое соединение.

include('connection.php'); 

имеет:

$password="mypassword"; 

Ранее вы установили:

$password=validateFormData($_POST['password']); 

так что ваш Хешированное пароль не пароль пользователя, но ваш DB пароль.

Я бы префикс всех переменных учетных данных БД db_. Таким образом, ваша переменная пароля базы данных будет равна $db_password. Это позволит вам иметь различные переменные во всем вашем проекте (я думаю).

Кроме того, вы должны использовать $formPass, а не $newpass. $newpass будет двойным хэшем в функции verify.

$formEmail=validateFormData($_POST['loginEmail']); 
$formPass=validateFormData($_POST['loginPassword']); 
$newPass=password_hash($formPass,PASSWORD_DEFAULT); 

так изменить:

if(password_verify($newPass,$LogPass)) 

к:

if(password_verify($formPass, $LogPass)) 
+0

okay я изменил пароль переменной на db_password и в login.php я хэшировал данные формы и эхо его дал «$ 2y $ 10 $ boLdsZ6VRceuEf4x7x8II.in9yHN0nCDFLABEU5xJg. 8BjvVvB6uC» –

+0

и $ LogPass эхо„$ 2y $ 10 $ biz6Z5nxsMZXNf7p3ebqw.pksPb1VhWEmoan776rMqOC7VcFRQbrK“поэтому они отличаются –

+0

извините, перемешанный $ formPass не образуют данные –

0

password_verify ожидает читаемый пароля в качестве первого аргумента. Чтобы исправить код, удалите эту строку:

$newPass=password_hash($formPass,PASSWORD_DEFAULT); 

И изменить эту строку:

if(password_verify($newPass,$LogPass)) 

Чтобы следующее:

if(password_verify($formPass,$LogPass)) 
+0

Эй @ Chris85 Кажется, я прибыл в то время как вопрос был в движении. Никто не написал ответ, когда я разместил это, и большая часть комментариев была скрыта. Я только что увидел проблему в 'login.php' и написал об этом. даже не догадывался до тех пор, пока только (после прочтения вашего ответа), что были другие проблемы, которые были исправлены до моего приезда (например, перезапись пароля db) – BeetleJuice

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