테스트 사이트 - 개발 중인 베타 버전입니다

sms 문자 인증 기능 구현 중인데 response 반환이 안 되는 경우도 있네요. 채택완료

호다 2년 전 조회 2,055

안녕하세요? 항상 도움 받고 있습니다. 감사합니다.

휴대폰 인증 부분을 작업 중인데 인증 시간 관련 코드를 추가하니까 post 로 가져온 인증번호가 휴대폰 번호에 안 맞는 경우에도 response 로 "not_found" 를 반환하지 않아서요. 제 코드 좀 봐주실 수 있으실까요?  

 

include_once('./_common.php');

 

// 인증번호 확인 요청 처리

if (isset($_POST['mb_hp']) && isset($_POST['mb_certify_num'])) {

    $mb_hp = $_POST['mb_hp'];

    $mb_certify_num = $_POST['mb_certify_num'];

 

    // 인증번호를 입력한 휴대폰 번호와 비교해서 올바르게 입력했는지 확인합니다.

    $sql_check = "SELECT * FROM g5_member WHERE mb_hp = '$mb_hp' AND mb_certification_number = '$mb_certify_num'";

    $row_check = sql_fetch($sql_check);

 

    // 사용자의 현재 시도 횟수와 마지막 시도 시간을 가져옵니다.

    $sql_get_attempt = "SELECT mb_auth_attempt, mb_certification_number_creation_time FROM g5_member WHERE mb_hp = '$mb_hp'";

    $row_get_attempt = sql_fetch($sql_get_attempt);

    $attempt = intval($row_get_attempt['mb_auth_attempt']);

    $last_attempt_time = strtotime($row_get_attempt['mb_certification_number_creation_time']);

    $current_time = time();

 

    // 시도 횟수 제한 및 시간 제한 설정

    $max_mb_auth_attempt = 5; // 원하는 시도 횟수 제한을 설정합니다.

    $max_attempt_time = 5 * 60; // 5분

 

    // 시도 횟수를 증가시킵니다.

    $attempt++;

 

    if ($attempt > $max_mb_auth_attempt || ($current_time - $last_attempt_time) < $max_attempt_time) {

        // 시도 횟수 초과 또는 시간 초과한 경우, mb_auth_attempt를 초기화하고 알림창을 띄웁니다.

        $attempt = 0;

        $sql_reset_attempt = "UPDATE g5_member SET mb_auth_attempt = 0, mb_certification_number_creation_time = NOW() WHERE mb_hp = '$mb_hp'";

        sql_query($sql_reset_attempt);

        echo "attempt_exceeded"; // 시도 횟수 초과 오류 메시지를 반환합니다.

        exit();

    }

 

    if (!$row_check) {

        echo "not_found"; // 인증번호가 입력한 휴대폰 번호와 일치하지 않는 경우

    } else {

        $expire_time = strtotime($row_check['mb_certification_number_creation_time']) + (5 * 60); // 인증번호 생성 시간에서 5분을 더한 시간

 

        if ($current_time > $expire_time) {

            // 인증번호 생성 시간에서 5분을 초과한 경우

            // 시도 횟수를 초기화하고 시간 제한을 설정합니다.

            $attempt = 0;

            $sql_reset_attempt = "UPDATE g5_member SET mb_auth_attempt = 0, mb_certification_number_creation_time = NOW() WHERE mb_hp = '$mb_hp'";

            sql_query($sql_reset_attempt);

            echo "time_over"; // 시간 초과 오류 메시지를 반환합니다.

        } else {

            // 인증 성공 시 시도 횟수를 초기화하고 로그인 처리를 진행합니다.

            $attempt = 0;

            $sql_reset_attempt = "UPDATE g5_member SET mb_auth_attempt = 0, mb_last_auth_attempt_time = NOW() WHERE mb_hp = '$mb_hp'";

            sql_query($sql_reset_attempt);

            echo "success"; // 인증번호 확인 성공

        }

    }

    exit(); // 처리 후 종료

}

 

?>

 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

채택된 답변
+20 포인트
2년 전

</p>

<p>  $sql_check = "SELECT * FROM g5_member WHERE mb_hp = '$mb_hp' AND mb_certification_number = '$mb_certify_num'";</p>

<p>    $row_check = sql_fetch($sql_check);</p>

<p>

</p>

<p>  $sql_check = "SELECT count(*) as cnt FROM g5_member WHERE mb_hp = '$mb_hp' AND mb_certification_number = '$mb_certify_num'";</p>

<p>    $row = sql_fetch($sql_check);</p>

<p>    $row_check = $row['cnt'];</p>

<p>

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

호다
2년 전
항상 도움을 받고 있습니다. 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

A
2년 전

시도 횟수 초과, 시도 횟수 제한 확인 하는부분이 $row_check 보다 앞에 있어서 오류나시는듯합니다

 

그리고 하나가 오타이신듯한... err_text_certify_num 다른곳은 전부 error_text_certify_num

 

그러고보니 호다님 자주 뵙는듯하군요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

호다
2년 전
항상 도움을 받고 있습니다. 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

지아부
2년 전

다른 부분은 모르겠지만 제가 알기로는 ajax로 응답 받을 때, success 콜백으로 받으신 response는 응답객체라서 응답한 텍스트를 찍으시려면 아래와 같이 response.responseText로 받으셔야됩니다. 

 

 if (response.responseText == "not_found") {

 

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

플라이
2년 전

위 부분만으로는 정확한 체크가 어렵습니다.

해당 반응하는 부분에 echo를 찍어 확인해서 제대로 반응하는지 확인해보셔야 할듯 합니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인