2017-02-19 2 views
3

등록 페이지와 로그인 페이지가 있으므로 등록 페이지가 완벽하게 작동하지만 로그인 페이지가 제대로 작동하지 않는 것 같아서 알아낼 수 있습니다.

가 내가 로그인의 페이지에 해시 된 암호를 반향 수 있어요으로 내 데이터베이스가 작동하는 것 같군

, 그것은 password_verify()

등록 페이지와 함께 할 수있는 뭔가가 보인다 (작업)

(작동하지 않음)
<?php 
include("assets/includes/conn.php"); 

$user = $_POST['username']; 
$pass = $_POST['pass']; 
$cPass = $_POST['c-pass']; 
$email = $_POST['email']; 

$options = [ 
    'cost' => 11 
]; 

if($pass == $cPass){ 

    $stmt = $conn->prepare("INSERT INTO users (username, pass, email) VALUES (?, ?, ?)"); 
    $stmt->bind_param("sss", $user, $h_p, $email); 

    $user = $_POST['username']; 
    $h_p = password_hash($pass, PASSWORD_DEFAULT, $options)."\n"; 
    $email = $_POST['email']; 
    $stmt->execute(); 

    echo "Created"; 
    echo $h_p; 
    $stmt->close(); 
    $conn->close(); 

} 

로그인 페이지 여기

<?php 
include("assets/includes/conn.php"); 

$username = $_POST['username']; 
$password = $_POST['pass']; 

$sql = "SELECT * FROM users WHERE username = '$username'"; 
$result = $conn->query($sql); 

if ($result->num_rows == 1){ 
    $row = $result->fetch_assoc(); 
    $hash = $row['pass']; 

    if(password_verify($password, $hash)){ 
     echo "Yes"; 
    } else { 
     echo "No<br/>"; 
     echo "" . $hash . "<br/>"; 
     echo $password; 

    } 
} 
+0

왜 실패했는지에 대한 몇 가지 생각이 있지만 아래 답변을 볼 수 있습니다. –

+0

변수가 제대로 전송되지 않는 문제가있는 경우 [오류 표시] (http://stackoverflow.com/questions/1053424/how-do-i-ko-php-errors-to-display)를 확인하십시오. 스크립트 등등. – Mike

+0

@Mike 문제는 내가 오류라고 생각하지 않는다. 암호가 해쉬 된 것과 관련이있을 수도 있지만 암호가 정확하지 않다는 것을 알려주는 것이다. –

답변

8

문제에 그 \n입니다 :

$h_p = password_hash($pass, PASSWORD_DEFAULT, $options)."\n"; 
                 ^^ 

비밀번호/해시의 끝에 carriage return/linefeed를 추가 (보이지 )입니다.

제거 할 수 있습니다.

$h_p = password_hash($pass, PASSWORD_DEFAULT, $options); 

또는 trim()이 :

$h_p = password_hash($pass, PASSWORD_DEFAULT, $options)."\n"; 
$h_p = trim($h_p); 

password_hash()의 수동 그것에 대해 언급하고,이를 데이터베이스에 저장을위한 그것의 사용을하지 않는 이유를 솔직히 모르는 (또는 파일).

참고 :이 문서 여기을 사용하지 않은 것은, 여기 질문에서 수행 된 것입니다 예에변수를 할당 이었다. 어떤 사람들은 예제를 사용하고 그것에 변수를 할당하면 효과가 있다고 생각할 수도 있습니다. 이 표시되지 않습니다.; 해시를 저장하고 그 후에 확인하는 것이 아닙니다.

echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n"; 

그러나 일 :로

수동에서 예를 읽기

$var = password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n"; 

사실 (이론적으로)이 때문에 concated 줄 바꿈 문자의 (61 길이의 문자열을 포함합니다), 줄 바꿈 문자가없는 의도 된 60 대신.

  • 이제 현재의 해시를 제거하고 새로운 해시 집합으로 다시 시작해야합니다.

    그냥 경우에 URL 여기에, 나중에 404의 위의 코드의
     
    $2y$10$494GPYzaynEkfYxE3wcAj.OtwBU3CCwTMXOHKbdJmOqwMXRmq6v1u 
    61 
    

    : 이런, 그것은을 출력 뭔가 실행하면

this sandbox code example

에서보세요

<?php 
$foo = password_hash('mypass', PASSWORD_DEFAULT)."\n"; 
echo $foo; 
echo strlen($foo); 

추가 참고 사항; 당신은 INSERT에 대한 것과 마찬가지로 귀하의 SELECT에 대해 준비된 진술을 사용해야합니다. 훨씬 더 안전합니다.

+0

고마워요. –

+0

@TristanSchlarman 여러분을 환영합니다. 어제 밤 문제가 있었지만 잠자리에 들었다. 그런 다음 오늘의 질문에 다시 답을 넣어 답변을 추가했습니다. 이제는 해결 된 것으로 표시 할 수 있습니다. –

+0

@TristanSchlarman은 위쪽/아래쪽 화살표 아래에 회색 눈금이 녹색으로 변할 때까지 클릭합니다. 그것이 문제가 풀린/닫힌 것으로 표시되는 방식입니다. –

관련 문제