카톡링크로 사이트 접속 후 가입하려고 할 때 발생하는 약관동의 오류
본문
안드로이드 폰으로 카톡 링크를 받은 뒤 제 사이트에 접속한 후 가입하려고 하면 폼 제출 후에 약관에 동의해야 가입할 수 있다고 경고 안내가 뜬다고 합니다..
아이폰에서는 발생하지 않는데 안드로이드 폰에서만 발생을 하는 것 같아요.. 도대체 왜 이런 걸까요? 카톡 링크로 접속하지 않고 브라우저로 접속하면 잘 돼요
답변 3
두 개 링크가 다른건 아닌가요? 해당 질문만 가지고는 알 수 있는게 없습니다.
약관 부분을 순정으로 바꾸거나
https://demo.sir.kr/gnuboard5/bbs/register.php
이 데모링크로 테스트 해보세요.
약관을 채크 안하고 바로 회원가입 페이지로 연결 하셨으면 발생할수 있는 에러 입니다.
. . . 그누보드5의 회원 가입 로직은
클라이언트 측에서 자바스크립트를 사용해 약관 동의 여부를 확인한 후,
서버로 폼 데이터를 전송합니다. 아이폰에서는 정상적으로 동작하지만
안드로이드폰에서만 문제가 발생한다면,
자바스크립트의 브라우저 호환성 이슈일 가능성이 높습니다.
특히, document.getElementById
, querySelector
, 또는 checked
속성 관련 코드가
특정 안드로이드 브라우저에서 다르게 동작할 가능성이 있습니다.
※ 해결 방안 개요 :
안드로이드폰에서 발생하는 문제는 약관 동의 체크박스의 상태를 확인하는
자바스크립트 코드가 특정 브라우저와 호환되지 않기 때문일 가능성이 큽니다.
이를 해결하려면, 약관 체크박스의 상태 확인 코드를 표준화된 방식으로 수정하고,
폼 제출 시 자바스크립트 오류가 발생하지 않도록 디버깅해야 합니다.
동시에, 서버에서도 약관 동의 여부를 다시 확인하여,
추가적인 검증을 수행하여 보안을 강화해야 합니다.
- /skin/member/basic/register_form.skin.php
파일에서 약관 동의 체크박스를 확인하는 코드를 찾아 수정
if (!document.getElementById('agree').checked) {
alert('약관에 동의하셔야 가입이 가능합니다.');
return false;
}
var agreeCheckbox = document.querySelector('#agree');
if (!agreeCheckbox || !agreeCheckbox.checked) {
alert('약관에 동의하셔야 가입이 가능합니다.');
return false;
}
- /bbs/register.php
파일에, 약관 동의 값이 서버로 제대로 전달되는지 확인하는 코드 추가
<?php
include_once('./_common.php');
if ($is_member) {
goto_url(G5_URL);
}
set_session("ss_mb_reg", "");
$g5['title'] = '회원가입약관';
include_once('./_head.php');
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!isset($_POST['agree']) || $_POST['agree'] !== 'on') {
alert('약관에 동의하셔야 가입이 가능합니다.', G5_URL);
exit;
}
$register_action_url = G5_BBS_URL.'/register_form.php';
goto_url($register_action_url);
} else {
$register_action_url = G5_BBS_URL.'/register.php';
include_once($member_skin_path.'/register.skin.php');
}
include_once('./_tail.php');
- /skin/member/basic/register.skin.php
수정된 파일
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="'.$member_skin_url.'/style.css">', 0);
?>
<!-- 회원가입약관 동의 시작 { -->
<div class="register">
<form name="fregister" id="fregister" action="<?php echo $register_action_url ?>" onsubmit="return fregister_submit(this);" method="POST" autocomplete="off">
<p><i class="fa fa-check-circle" aria-hidden="true"></i> 회원가입약관 및 개인정보 수집 및 이용의 내용에 동의하셔야 회원가입 하실 수 있습니다.</p>
<?php
// 소셜로그인 사용시 소셜로그인 버튼
@include_once(get_social_skin_path().'/social_register.skin.php');
?>
<section id="fregister_term">
<h2>회원가입약관</h2>
<textarea readonly><?php echo get_text($config['cf_stipulation']) ?></textarea>
<fieldset class="fregister_agree">
<input type="checkbox" name="agree" value="on" id="agree" class="selec_chk">
<label for="agree"><span></span><b class="sound_only">회원가입약관의 내용에 동의합니다.</b></label>
</fieldset>
</section>
<section id="fregister_private">
<h2>개인정보 수집 및 이용</h2>
<div>
<table>
<caption>개인정보 수집 및 이용</caption>
<thead>
<tr>
<th>목적</th>
<th>항목</th>
<th>보유기간</th>
</tr>
</thead>
<tbody>
<tr>
<td>이용자 식별 및 본인여부 확인</td>
<td>아이디, 이름, 비밀번호<?php echo ($config['cf_cert_use'])? ", 생년월일, 휴대폰 번호(본인인증 할 때만, 아이핀 제외), 암호화된 개인식별부호(CI)" : ""; ?></td>
<td>회원 탈퇴 시까지</td>
</tr>
<tr>
<td>고객서비스 이용에 관한 통지,<br>CS대응을 위한 이용자 식별</td>
<td>연락처 (이메일, 휴대전화번호)</td>
<td>회원 탈퇴 시까지</td>
</tr>
</tbody>
</table>
</div>
<fieldset class="fregister_agree">
<input type="checkbox" name="agree2" value="on" id="agree2" class="selec_chk">
<label for="agree2"><span></span><b class="sound_only">개인정보 수집 및 이용의 내용에 동의합니다.</b></label>
</fieldset>
</section>
<div id="fregister_chkall" class="chk_all fregister_agree">
<input type="checkbox" name="chk_all" id="chk_all" class="selec_chk">
<label for="chk_all"><span></span>회원가입 약관에 모두 동의합니다</label>
</div>
<div class="btn_confirm">
<a href="<?php echo G5_URL ?>" class="btn_close">취소</a>
<button type="submit" class="btn_submit">회원가입</button>
</div>
</form>
<script>
function fregister_submit(f)
{
// 약관 동의 확인
if (!f.agree.checked) {
alert("회원가입약관의 내용에 동의하셔야 회원가입 하실 수 있습니다.");
f.agree.focus();
return false;
}
// 개인정보 동의 확인
if (!f.agree2.checked) {
alert("개인정보 수집 및 이용의 내용에 동의하셔야 회원가입 하실 수 있습니다.");
f.agree2.focus();
return false;
}
return true;
}
jQuery(function($){
// 모두선택 체크박스 동작
$("input[name=chk_all]").click(function() {
$("input[name^=agree]").prop('checked', $(this).prop('checked'));
});
// 개별 체크박스 선택 해제 시 모두선택 해제
$("input[name^=agree]").click(function() {
if (!$(this).prop('checked')) {
$("input[name=chk_all]").prop('checked', false);
}
});
});
</script>
</div>
<!-- } 회원가입 약관 동의 끝 -->
★ 자바스크립트 수정 후,
크라이언트의 안드로이드 폰 브라우저 캐시가 문제를 일으킬 수 있으므로
"설정" > "애프리케이션" > "Chrome" > "저장공간" > 캐시 삭제를 하세요.
!-->!-->!-->