2017-10-09 69 views
0

由於password_verify的實現,我在登錄文件中遇到了一些麻煩。該文件沒有password_verify()驗證工作正常。Php登錄無法使用password_verify(Android)

下面我的登錄文件:

<?php 
     include 'config.inc.php'; 
// Innitialize Variable 
     $result=''; 
     $username = $_POST['username']; 
     $userpassword = $_POST['password']; 

     // Query database for row exist or not 
     $sql = 'SELECT password FROM user WHERE email = :username'; 
     $stmt = $connection->prepare($sql); 
     $stmt->bindParam(':username', $username, PDO::PARAM_STR); 
     $stmt->bindParam(':userpassword', $userpassword, PDO::PARAM_STR); 
     $stmt->execute(); 

     // $row = mysqli_fetch_array($stmt); 
     $row = $stmt->fetchAll(PDO::FETCH_ASSOC); 

     if (password_verify($userpassword, $row['password'])) { 
      $result="true"; 
        } else { 
         $result="false"; 
          } 

     // send result back to android 
     echo $result; 

    ?> 

這裏也是我的註冊文件以供參考(這是運作良好):

<?php 

include 'config.inc.php'; 

// Check whether username or password is set from android 
if(isset($_POST['user']) && isset($_POST['email']) && isset($_POST['password'])) 
{ 
     // Innitialize Variable 
    $result=''; 
     $user = $_POST['user']; 
     $email = $_POST['email']; 
     $password = $_POST['password']; 

     // Encryption of password 
     $options = [ 
     'cost' => 12, 
     ]; 
     $password = password_hash($password, PASSWORD_BCRYPT, $options); 

     // Query database for row exist or not 
     $sql = 'INSERT INTO user VALUES (NULL, :user, :email, :password, 0, 1, 1)'; 
     $stmt = $connection->prepare($sql); 
     $stmt->bindParam(':user', $user, PDO::PARAM_STR); 
     $stmt->bindParam(':email', $email, PDO::PARAM_STR); 
     $stmt->bindParam(':password', $password, PDO::PARAM_STR); 
     $stmt->execute(); 
    if($stmt->rowCount()) 
     { 
     $result="true";  
     } 
     elseif(!$stmt->rowCount()) 
     { 
      $result="false"; 
     } 

     // send result back to android 
     echo $result; 
} 

?> 

感謝您的支持!

奧利弗

+0

看來'$ row ['password']'沒有被散列。檢查手冊[password_verify](http://php.net/manual/en/function.password-verify.php) –

+0

此外,當你已經在這裏綁定'$ stmt-> bindParam(':password',$ password,PDO :: PARAM_STR);'那麼'再次驗證'的目的是什麼? –

+0

不應該在將':userpassword'綁定到登錄SELECT時沒有出現錯誤嗎? – mario

回答

-1

1>請檢查您的密碼字段的數據庫是哈希格式化值嵌件

2>然後登錄頁面的SQL查詢檢查

3>如果密碼被插入散列格式化值你必須選擇你的密碼 php哈希函數來選擇你的帖子密碼