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'];

 

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

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

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

 

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

 

 

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

 

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

 

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

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

회원로그인

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