2016-09-29 78 views
0

我正在研究一个需要用户登录才能访问内容的Web应用程序。我是PHP新手,所以我试图弄清楚当我试图从数据库中检索信息时,我的代码是否有问题。AngularJS PHP MYSQL用户登录

<?php 

include('./connection.php'); 
$loginInfo = json_decode(file_get_contents('php://input')); 
$username = $loginInfo->username; 
$password = password_hash($loginInfo->password, PASSWORD_DEFAULT); 

$q = $db->prepare("SELECT * FROM userauth WHERE username=:username AND password=:password"); 
$q->bindParam(':username', $username, PDO::PARAM_STR); 
$q->bindParam(':password', $password, PDO::PARAM_STR); 
$q->execute(); 

$userRow=$q->fetch(PDO::FETCH_ASSOC); 

if($userRow == true){ 
    print 'success'; 
}else{ 
    print 'error'; 
} 

?> 

下面是角的服务:

'use strict'; 

app.factory('loginSrv', function($http,$location){ 
return{ 
    login:function(loginInfo, scope){ 
     var $promise = $http.post('../app_back_end/app_endpoints/login.php', loginInfo); 
     $promise.then(function(msg){ 
      if(msg.data == 'success'){ 
       console.log('success login'); 
       $location.path('/profile'); 
      } 
      else { 
       console.log('error login'); 
       scope.msgtxt = 'Want to try again? :)'; 
      } 
     }); 
    } 
} 
}); 
+1

'$ userRow' return'associative array' not true !!阅读http://php.net/manual/en/pdostatement.fetch.php – Saty

+0

'password_hash()'你在SELECT上使用了错误的函数,你需要使用'password_verify()'。 –

+0

为什么比较$ userRow为true?你可以先尝试print_r()$ userRow来查看结果吗? –

回答

1

password_hash()不会从相同的输入两次产生相同的结果。

所以,即使输入的密码与您最初输入的密码相同,但您不会得到相同的散列值。

这就是password_verify()是为什么发明的,所以你的搜索只使用用户名,然后用password_verify()来检查密码是一样的。

<?php 

include('./connection.php'); 
$loginInfo = json_decode(file_get_contents('php://input')); 
$username = $loginInfo->username; 


$q = $db->prepare("SELECT * FROM userauth WHERE username=:username"); 
$q->bindParam(':username', $username, PDO::PARAM_STR); 
$q->execute(); 

$userRow=$q->fetch(PDO::FETCH_ASSOC); 

if(password_verify($loginInfo->password , $userRow['password'])){ 
    print 'success'; 
}else{ 
    print 'error'; 
} 
?>