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

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

QA

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

본문

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

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

<?php

 

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(); // 처리 후 종료

}

 

?>

 

<script>
 

function check_code_hp() {

    var input_id = $("#login_id").val();

    var input_hp = $("#login_hp").val();

    var input_certify_num = $("#login_certify_num").val();

 

    var error_text = $("error_text_certify_num");

 

    if (input_id == '' || input_hp == '' || input_certify_num == '') {

        $('#error_text_certify_num').text("로그인 정보를 입력하세요.");

        return false;

    }

 

    $.ajax({

        url: '/bbs/check_code_hp.php',

        type: 'POST',

        data: {mb_hp : input_hp, mb_certify_num : input_certify_num},

        success: function(response) {

            if (response == "not_found") {

                $('#error_text_certify_num').text("잘못된 인증번호입니다.");

                return false;

            } else if (response == "success") {

                $('#error_text_certify_num').text("인증되었습니다.");

                $("#btn_check_code_hp").prop("disabled", true);

            } else if (response == "attempt_exceeded") {

                $('#err_text_certify_num').text("당일 인증 실패 횟수가 초과하였습니다.");

                $("#btn_check_code_hp").prop("disabled", true);

            } else {

                $('#error_text_certify_num').text("오류가 발생했습니다. 다시 시도해주세요.");

            }

        }

    });

}

 

</script>



 

이 질문에 댓글 쓰기 :

답변 4


  $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_check = "SELECT count(*) as cnt FROM g5_member WHERE mb_hp = '$mb_hp' AND mb_certification_number = '$mb_certify_num'";
    $row = sql_fetch($sql_check);
    $row_check = $row['cnt'];

 

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

 

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

 

 

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

 

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

 

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

답변을 작성하시기 전에 로그인 해주세요.
전체 129,112 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT