2012-11-17 5 views
0

jQuery DataGrid 플러그인을 사용하여 사이트의 관리 영역에서 내 사용자 테이블을 쉽게 편집 할 수 있습니다. 나는 사용자가 등록 할 때 암호를 md5()로 저장한다. 내가 테이블을 업데이트하려고 시도 할 때, 그것은 암호를 다시 해싱하고 있으므로 사용할 수 없게 만듭니다. 암호를 확인하는 몇 가지 방법을 시도했지만 데이터베이스에있는 것과 동일하지만 아무 것도 작동하지 않는 것 같습니다.md5 비밀번호가 일치하지 않습니다.

가 여기 내 업데이트 코드입니다

PHP

<?php 
require_once("../class/TimeClock.class.php"); 

$tc = new TimeClock(); 
$id = $_POST['id']; 
$username = $_POST['username']; 
$password = $_POST['password']; 
$email = $_POST['email']; 
$active = $_POST['active']; 
$role = $_POST['role']; 
$emp_id = $_POST['emp_id']; 

if($tc->validatePass($id, $password)) { 
try { 
    $tc->connect(); 
    $query = $tc->dbh->prepare("UPDATE us_users SET username=:username,email=:email,active=:active,role=:role,emp_id=:emp_id WHERE id=:id"); 
    $query->execute(array(':username' => $username, ':email' => $email, ':active' => $active, ':role' => $role, ':emp_id' => $emp_id, ':id' => $id)); 
    $tc->close(); 
} catch (PDOException $e) { 
    throw new Exception('Something bad happened' . $e->getMessage()); 
} 
} else { 
try { 
    $password = md5($password); 
    $tc->connect(); 
    $query = $tc->dbh->prepare("UPDATE us_users SET username=:username,password=:password,email=:email,active=:active,role=:role,emp_id=:emp_id WHERE id=:id"); 
    $query->execute(array(':username' => $username, ':password' => $password, ':email' => $email, ':active' => $active, ':role' => $role, ':emp_id' => $emp_id, ':id' => $id)); 
    $tc->close(); 
} catch (PDOException $e) { 
    throw new Exception('Something bad happened' . $e->getMessage()); 
} 
} 

echo json_encode(array(
'id' => $id, 
'username' => $username, 
'password' => $password, 
'email' => $email, 
'active' => $active, 
'role' => $role, 
'emp_id' => $emp_id 
)); 
?> 

내 validatePasss() 함수 :

PHP 나는 mysql_로 코드가 구식 것을 알고

function validatePass($id, $pass) { 
    try { 
    $this->connect(); 
    $result = $this->dbh->prepare("SELECT username, password FROM us_users WHERE id=:id"); 
    $result->execute(array(':id' => $id)); 
    $userObj = $result->fetch(PDO::FETCH_ASSOC); 
    } catch(PDOException $e) { 
     throw new Exception('Something bad happened' . $e->getMessage()); 
     die(); 
    } 
    if($pass == $userObj['password']) { 
     return true; 
    } else { 
     return false; 
    } 
    $this->close(); 
} 

, 그러나 PDO를 사용하려고하면 오류가 발생하며 구성 요소 또는 그와 관련된 것입니다.

제공 할 수있는 도움 주셔서 감사합니다.

편집 :가 일치로 업데이트 스크립트에 전달해야한다, 변화하지 않는 한, 순수 PDO에 기능을 변경하고, 여기에 당신이 암호 해시로 저장되는 것을 볼 수 있도록 데이터 그리드의 이미지이며, 데이터베이스에있는 내용. 당신의 validatePass() 기능에

http://www.bolinconstruction.com/timeclock/datagrid.png

+0

어떤 오류가 있습니까? 우리에게 단서를 줄 수 없다면 많은 도움을 줄 수는 없습니다. – Brad

+0

어, 미안. 이 코드는 패스워드가 일치하는 것을 결코 보여주지 않으며, 대신 md5() 패스워드를 항상 되돌려 주므로, 어떤 세부 사항이라도 편집했다면 사용자가 로그인 할 수 없게된다. – FireCrakcer37

+0

db의 md5와 양식의 일반 텍스트 비밀번호를 비교하지 않습니까? –

답변

0

답변은 실제로 생각한 후에 실제로 간단했습니다. 초기 코드에서 양식과 함께 제출 된 사용자 이름의 암호를 데이터베이스에 폴링했습니다. 사용자 이름이 변경된 경우 물론 쿼리가 실패하고 따라서 암호가 변경됩니다. ID를 기반으로 데이터베이스를 폴링하도록 설정하면 문제가 해결 된 것 같습니다. 도와 줘서 고마워. 너희들 없이는 이걸 알아 내지 못했을거야.

1

, 당신은 당신이 당신의 쿼리에서 동일한 작업을 수행 할 수

if(md5($pass) == $userObj['password']) { 
    return true; 
} else { 
    return false; 
} 

을 비교하기 전에 암호를 해시해야한다

select id 
from from us_users 
where username = :username and password = :password 

다음

$result->execute(array(':username' => $username, ':password' => md5($password))); 

및 0보다 큰 행 수를 테스트하십시오.

+0

암호가 이미 양식에서 변경된 경우가 아니면 해시입니다. 기본적으로 양식의 암호 필드를 변경하지 않으면 처음부터 데이터베이스에서 가져온 값과 동일한 값을 다시 전달합니다. firbug를 사용하여 나는 이것을 사실로 결정했습니다. 그러나 모든 업데이트에서 여전히 암호가 변경됩니다. – FireCrakcer37

+0

인터넷에서 오는 md5 해시를 신뢰하는 것은 해시 된 암호를 데이터베이스에 저장하는 것과 같습니다. –

관련 문제