카톡링크로 사이트 접속 후 가입하려고 할 때 발생하는 약관동의 오류

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
카톡링크로 사이트 접속 후 가입하려고 할 때 발생하는 약관동의 오류

QA

카톡링크로 사이트 접속 후 가입하려고 할 때 발생하는 약관동의 오류

답변 4

본문

안드로이드 폰으로 카톡 링크를 받은 뒤 제 사이트에 접속한 후 가입하려고 하면 폼 제출 후에 약관에 동의해야 가입할 수 있다고 경고 안내가 뜬다고 합니다..

 

아이폰에서는 발생하지 않는데 안드로이드 폰에서만 발생을 하는 것 같아요.. 도대체 왜 이런 걸까요? 카톡 링크로 접속하지 않고 브라우저로 접속하면 잘 돼요

이 질문에 댓글 쓰기 :

답변 4

약관 부분을 순정으로 바꾸거나

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" > "저장공간" > 캐시 삭제를 하세요.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 6
© SIRSOFT
현재 페이지 제일 처음으로