2013-04-22 2 views
0

모든 사람이 md5가 더 이상 안전하지 않다고 말하기 때문에 저는 내 등록자와 로그인을 다른 암호화 (Phpass)로 변경하고 있습니다. 나는 등록 기능을 작동 시키려고 노력했지만 로그인이 작동하지 않는 이유를 파악할 수 없다. 이 코드는 오류없이 실행되지만이 행에서 전달되지 않습니다. if($stm->rowCount()>0){}Phpass 로그인이 작동하지 않습니다.

내 이전 로그인 버전 인 주석 처리 된 코드는 무시하십시오. 다른 제안은 환영합니다! 사용자가 더 사용자가없는 경우는 하늘을 반환, 데이터와 배열을 반환 $row = $stm->fetch(PDO::FETCH_ASSOC); 존재하는 경우

다음 rowCount()을 대체하는 방법에는 여러 가지가 있기 때문에

include("include/connection.php"); 
     require_once('include/PasswordHash.php'); 

     function login($db){ 
      if (isset($_GET["type"])){ 
       if($_GET["type"]=="log" && isset($_POST['email']) && isset($_POST['password'])){ 

        session_start(); 

        $email = $_POST['email']; 
        $password = $_POST['password']; 
        $hasher = new PasswordHash(8, false); 

        if($email=='' || $password==''){ 
         echo "<font style='background-color: #F9C5CA'>Error: Please fill the required fields.</font>"; 
        }else{ 

         //$password = md5($password); 
         $pass = $hasher->HashPassword($_POST['password']); 

         $sql = "SELECT email,password,id FROM user WHERE email=? AND password=?"; 
         $stm = $db->prepare($sql); 
         $stm->execute(array($email,$pass)); 
         $row = $stm->fetch(PDO::FETCH_ASSOC); 

         /*if($stm->rowCount()>0){ 

          $_SESSION['id']=$row['id']; 
          header('Location: cpanel/#welcome'); 
         }else{ 
          echo "<font style='background-color: #F9C5CA'>Error: Your email and/or password are incorrect. Please try again.</font>"; 
         }*/ 

         if($stm->rowCount()>0){ 
          if ($hasher->CheckPassword($pass,$row['password'])) { 
           $_SESSION['id']=$row['id']; 
           header('Location: cpanel/#welcome'); 
           exit(); 

          }else{ 
           echo "<font style='background-color: #F9C5CA'>Error: Your email and/or password are incorrect. Please try again.</font>"; 
          } 
         } 
        } 
       } 
      } 
     } 
+0

데이터베이스에서 저장된 암호를 가져와 제공된 암호로 확인할 수 있어야합니다. – Gumbo

+1

문제는 rowCount() 함수가 될 수 있습니다. [PDO document on rowCount] (http://php.net/manual/en/pdostatement.rowcount.php)를 읽으면 SELECT 문을 사용할 때 원하는 결과를 얻지 못할 수도 있다고합니다. –

+0

@Gumbo db에 저장된 해시 된 암호는 Select에서 제공되므로 문제가 있다고 생각하지 않습니다 .. – miguelfsf

답변

0

당신은, 조건을 변경할 수 있습니다 배열 :

// Count array and check if is greater than 0 
if (count($row) > 0) 
// Check if array is not empty 
if (!empty($row)) 
// Simple check. An empty array would return false 
if ($row) 
+0

문제는 지금 거기에 없습니다. 이제는 첫 번째 내부에 도착하지만 두 번째는 실행하지 않고 else로 점프합니다. 어떤 팁? – miguelfsf

+1

이 줄 뒤에 :'$ row = $ stm-> fetch (PDO :: FETCH_ASSOC);'다음을 실행하십시오 : die (print_r ($ row));'그러면 배열의 내용을 출력 할 것입니다. '$ hasher-> CheckPassword()'함수는 올바른 매개 변수를 얻습니다. –

+0

기다려서 미안해, 나는 저녁 먹어야했다. 그래서 나는 당신이 말한 것과 정확한 매개 변수를 얻는 것처럼 die()를 시도했다. 문제는이 행에 있어야합니다. if ($ hasher-> CheckPassword ($ pass, $ row [ 'password'])) {}'그리고 왜> 알아낼 수 없습니까? < – miguelfsf

0

해시 된 암호가 60 자인지 확인하십시오. 더 이상 아무것도 false를 반환합니다. 동일한 문제가 있으며 첫 번째 해시 된 암호가 61 자임을 알았습니다.