2016-07-10 2 views
0

내 로그인 시스템 md5가 사용자 이름을 해시하고 password_hash가 암호를 해시합니다. 따라서 사용자 이름을 기반으로 행을 가져올 수 없습니까? 내 고객은 다음 이메일 주소를 입력합니다. 그런 다음 분실 한 비밀번호 변경 옵션을 제공합니다. 그러나 동일한 유형의 해시를 사용하여 필드를 업데이트 할 때 전자 메일 필드를 식별자로 사용하면 새 암호가 올바르지 않습니까? 다음은 나의 업데이트 샘플이지만 하드 코딩 된 삽화입니다 (추신 : 이건 작동하지 않나요?).Password_hash 테이블 업데이트 후 올바르지 않음

$em = '[email protected]'; 
$em1 = base64_encode($em); 
$ps = 'some password'; 
$password_hash = password_hash($ps, PASSWORD_BCRYPT); 
$qu = "UPADTE table SET field = '$password_hash' WHERE email = '$em1'"; 
$res = mysqli_query($link, $qu); 

편집 문제는 사용자가 존재하는지 확인하고 적극적으로 계정의 소유자로 자신을 식별하는 이메일을 발송 한 후 내 코드를 포함합니다. 다음은 최종 프로세서 페이지입니다.

if(EMPTY($_POST[psw1])) { 
echo "New password must be supplied"; } 
elseif(EMPTY($_POST[psw2])) { 
echo "Repeat password must be entered"; } 
elseif($_POST[psw1] != $_POST[psw2]) { 
echo "Passwords entered do not match"; 
} elseif(EMPTY($_POST[eu])) { 
echo "Essential data is missing in order to complete this process."; 
} 
elseif (strlen($_POST['psw1']) < 6) { 
echo "Password must be at least six characters in length"; 
    } 
elseif (preg_replace("/[^a-zA-Z0-9]/", "", $_POST['psw1']) !=  $_POST['psw1']) { 
echo "Password may only contain letters and numbers"; 
    } 
elseif(!EMPTY($_POST[psw1]) && !EMPTY($_POST[psw2]) && !EMPTY($_POST[eu]) && $_POST[pw1] == $_POST[pw2]) { 

include "conn.php"; 
echo "$_POST[eu]<br />"; 
$eu = $_POST[eu]; 
$pdw = password_hash($_POST[pw1], PASSWORD_BCRYPT); 

$sq = mysqli_query($link, "UPDATE str1 SET pf = '$pdw', cu_pw_status = '2' WHERE cu_type = '$eu'"); 
echo "Your password has been changed, you may now login <a href='login2.php'>Login</a>"; 
} else { 

echo "오류가 발생했습니다. 사이트 관리자에게 문의하십시오."; }

+0

안녕은, 어떤 테이블이 참조 위해이었다, 열 또는 필드 PF라고, str1이 호출되지 않습니다. 암호가 업데이트되었지만 올바르지 않습니까? – Szue

답변

1
  1. 사용자 테이블에 '필드'열이 있는지 확인하십시오. 의심 스럽네요.
  2. 업데이트 문자열을 확인하십시오. 이제 테이블 이름이 누락됩니다. 당신이 업데이트하기 전에 사용자가있는 경우
  3. 확인 :

    $exists = mysqli_query("SELECT id FROM users WHERE email='$em1'); 
    
    if (!is_empty($exists)) { 
    
        mysqli_query("UPDATE TABLE users SET password = '$ps' WHERE id='$exists'); 
    
        echo 'updated' . "\n"; 
    
    } else { 
    
        echo 'no user with such email hash' . "\n"; 
    } 
    
+0

안녕하세요, 이미 사용자가 존재하는지 확인하고, 이메일을 보내고, 확인 된 이메일에서 콜백 식별자를 받았습니다. 그런 다음 암호를 변경하지만 암호는 변경되지 않습니다. – Szue

+0

실제 작업 코드를 게시 할 수 있습니까? 이 것은 객체 키 주위에'EMPTY ($ _ POST [psw1])'따옴표가 없기 때문에 작동하지 않습니다. –

+0

그리고 '새로운 비밀번호가 틀립니다'라는 말은 무슨 뜻입니까? 업데이트 된 경우 암호를 확인하는 로그인 기능에 문제가 있습니다. –