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개 / 댓글 2개
$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'];
시도 횟수 초과, 시도 횟수 제한 확인 하는부분이 $row_check 보다 앞에 있어서 오류나시는듯합니다
그리고 하나가 오타이신듯한... err_text_certify_num 다른곳은 전부 error_text_certify_num
그러고보니 호다님 자주 뵙는듯하군요
답변을 작성하려면 로그인이 필요합니다.