휴대폰인증문제 - 아이코드? ajax?
본문
올려주신 아래 소스코드를 감사한맘으로 적용중입니다
구버전 그누보드(5.3.1)에서 작성된 코드다보니 제버전(5.3.2.6)에 맞추어 sms.php, register_form.php 등 변경된 부분만 적용하였습니다
그리고 phpMyadmin에서 a_num이 4자리로 되어있는걸 5자리로도 수정하였구요
그런데 계속 입력한 인증번호가 일치하지 않는다고 나오네요.
실제로 phpMyadmin에서 확인한 a_num을 동일하게 넣었는데도 말이에요..
코드를 좀 더 살펴보니
ajax_send.php가 제대로 작동하지 않는것같다는 느낌이 들었습니다.
참고로 ajax_send.php는 아래와 같은데요.
<?php
include_once('../common.php');
$a_auth = trim($_POST['a_auth']);
$recv_number = trim($_POST['mb_hp']);
$sql = "select count(*) as cnt from sms_auth where a_hp='$recv_number' and a_auth>'".(time()-60*10)."' "; // 현재 10분
입니다. 추후 10을 변경하시면 됩니다.
$row = sql_fetch($sql);
if ($row[cnt]>5){ //제한 횟수
echo "F";
}else{
if($config['cf_sms_use'] == 'icode') {
include_once(G5_LIB_PATH.'/icode.sms.lib.php');
$a_num = rand(10000, 99999);
$sms_content = "본인확인 인증번호[".$a_num.']를 화면에 입력해주세요';
$send_number = preg_replace('/[^0-9]/', '', $sms5['cf_phone']);
if($recv_number) {
sql_query("insert into sms_auth set a_auth='$a_auth', a_num='$a_num', a_hp='$recv_number', a_regdate=now()");
$SMS = new SMS; // SMS 연결
$SMS->SMS_con($config['cf_icode_server_ip'], $config['cf_icode_id'], $config['cf_icode_pw'], $config['cf_icode_server_port']);
$SMS->Add($recv_number, $send_number, $config['cf_icode_id'], iconv("utf-8", "euc-kr", stripslashes($sms_content)), "");
$SMS->Send();
}
echo "Y";
exit;
}else{
echo "N";
}
}
?>
여기서는 각 경우에 대해 echo "F", "Y", "N"로 처리하는 반면 이 결과값이 sms.php로 제대로 넘어오지 않아 sms.php에서 제대로 작동하지 않는듯합니다 ㅜㅜ
예컨대 sms.php에는 아래와 같은 코드가 있는데요.
function authSend(){
var f1 = document.sForm;
$.post("/bbs/ajax_send.php", $("#sForm").serialize(),function(data){
if (data=="F"){
alert("단시간에 너무 많은 요청을 하셨습니다.\n\n잠시후 이용 부탁드립니다.");
}else{
alert("요청하신 휴대폰으로 '인증번호'가 발송되었습니다.");
f1.sendYN.value = "Y";
f1.auth_num.focus();
}
});
}
data값이 F일때 "단시간에 ~~"라는 alert를 띄워야하는데 그냥 무조건 else로 처리되더군요..
분명 예전댓글들을 보니 다들 잘 된다하셧는데..
혹시 버전이 구버전(5.3.1)에서 신버전(5.3.2.6) 그누보드가 되면서 위와 같은 ajax(?)가 안먹히게 되었을까요?
아니면 다른문제가 있는걸까요? 참고로 aws 사용중입니다...
답변달아주실분들께 미리 감사드리며..이 글이 후에 검색하시는분들께도 도움이 되면 좋겠습니다.
답변 7
5.3.2 로 바뀌었다고 해서 갑자기 ajax가 안 될리는 없을 겁니다.
최근 버전에 해당 팁을 적용해본 적이 있었는데 자리수 문제 말고는 별다른 문제가 없었던걸로 기억합니다.
디비에 인증번호 및 휴대폰번호가 정상으로 입력되고 인증번호가 발송된다면 위 파일들의 문제가 아닙니다. 인증번호를 체크하는 파일을 살펴보셔야합니다.
*나중에 정보를 찾는 분들 보시라고 댓글 남깁니다.
sms.php 에서 data == Y or N 로 판단을 하는데 이부분이 이상한것같아서 alert("인증번호가 일치하지 ~~" + data);로 data를 출력시도해보았습니다.
그러하였더니 아래와 같았습니다.
입력하신 '인증번호'가 일치하지 않습니다.<br />
<b>Warning</b>: Use of undefined constant a_num - assumed 'a_num' (this will throw an Error in a future version of PHP) in <b>/opt/lampp/htdocs/bbs/ajax_check.php</b> on line <b>10</b><br />
N
해결하였습니다... 자문자답이라 민망하지만ㅜ좀 써보자면..
이는 php 버전이 업데이트되면서 발생한 문제로 아래 링크를 참고하시면 됩니다..
https://www.happyjung.com:6001/lecture/2816
따라서 ajax_check.php의
if ($row[a_num]==$auth_num){
echo "Y";
부분의 a_num을 'a_num'으로 변경하였더니 잘 작동합니다..
같은 원리로 ajax_send의 cnt도 'cnt'로 감싸줘야합니다
참고 많이 되었습니다
if ($row['a_num']==$auth_num){
감싸고 했는데도 인증번호 오류로 나옵니다.
그리고 cnt도 감싸줬는데도 인증번호 오류가 납니다.
어떻게 해결을 해야될까요 ㅠㅠ