회원 아이디를 이메일 주소로 가입 및 로그인 - 그누보드팁

본문 바로가기
전체검색

그누보드팁

그누보드, 영카트 초보 제작자분들을 위한 다양한 스킨 제작 활용 팁을 공유합니다.

회원 아이디를 이메일 주소로 가입 및 로그인

관리자 18-03-21 15:04

회원 가입할 때 아이디를 이메일 주소로 사용하는 방법입니다.

로그인할 때도 이메일 주소를 입력해서 로그인할 수 있습니다.

꼭 필요한게 아니라면 웬만하면 수정하지 마시고 그누보드 원본 그대로 사용하는 게 좋습니다.



1. 스킨 파일 수정


skin/member/basic/register_form.skin.php 파일 수정

(모바일 페이지도 사용 중이라면 모바일 스킨도 별도로 수정)


 

1-1.


아이디 입력 부분에서 안내 문구 및 아이디 글자수 제한을 이메일 길이에 맞게 적당히 수정


영문자, 숫자, _ 만 입력 가능. 최소 3자이상 입력하세요.

예를 들어 여기는 이렇게 수정.

이메일 주소를 입력하세요. 아이디는 이메일 주소로 사용됩니다.


minlength = 최소 글자수, maxlength = 최대 글자수

maxlength="100" 정도로 수정. 너무 길면 원하시는대로 알맞게 설정.


<span class="frm_info">영문자, 숫자, _ 만 입력 가능. 최소 3자이상 입력하세요.</span>
<input type="text" name="mb_id" value="<?php echo $member['mb_id'] ?>" id="reg_mb_id" <?php echo $required ?> <?php echo $readonly ?> class="frm_input <?php echo $required ?> <?php echo $readonly ?>" minlength="3" maxlength="20">
 


1-2. 


기존에 있던 이메일 입력 부분 전체 삭제


<tr>
    <th scope="row"><label for="reg_mb_email">E-mail<strong class="sound_only">필수</strong></label></th>
    <td>
        <?php if ($config['cf_use_email_certify']) {  ?>
        <span class="frm_info">
            <?php if ($w=='') { echo "E-mail 로 발송된 내용을 확인한 후 인증하셔야 회원가입이 완료됩니다."; }  ?>
            <?php if ($w=='u') { echo "E-mail 주소를 변경하시면 다시 인증하셔야 합니다."; }  ?>
        </span>
        <?php }  ?>
        <input type="hidden" name="old_email" value="<?php echo $member['mb_email'] ?>">
        <input type="text" name="mb_email" value="<?php echo isset($member['mb_email'])?$member['mb_email']:''; ?>" id="reg_mb_email" required class="frm_input email required" size="70" maxlength="100">
    </td>
</tr>


1-3. 


같은 파일 하단 스크립트에서 이메일 검사 부분 삭제


// E-mail 검사
if ((f.w.value == "") || (f.w.value == "u" && f.mb_email.defaultValue != f.mb_email.value)) {
    var msg = reg_mb_email_check();
    if (msg) {
        alert(msg);
        f.reg_mb_email.select();
        return false;
    }
}


2. bbs/register_form_update.php 파일 수정


2-1.


$mb_email       = trim($_POST['mb_email']);

여기를 이렇게 수정

$mb_email       = trim($_POST['mb_id']);


2-2.


아래 내용 주석 처리


// if ($msg = empty_mb_email($mb_email))   alert($msg, "", true, true);
// if ($msg = valid_mb_email($mb_email))   alert($msg, "", true, true);
// if ($msg = prohibit_mb_email($mb_email))alert($msg, "", true, true);
 


2-3.


아래 내용에서 빨간색 부분 삭제


if (get_session('ss_check_mb_id') != $mb_id || get_session('ss_check_mb_nick') != $mb_nick || get_session('ss_check_mb_email') != $mb_email) {
    set_session('ss_check_mb_id', '');
    set_session('ss_check_mb_nick', '');
    set_session('ss_check_mb_email', '');
    alert('올바른 방법으로 이용해 주십시오.');
}
 

수정하면 이렇게 되겠죠


if (get_session('ss_check_mb_id') != $mb_id || get_session('ss_check_mb_nick') != $mb_nick) {
    set_session('ss_check_mb_id', '');
    set_session('ss_check_mb_nick', '');
    alert('올바른 방법으로 이용해 주십시오.');
}
 


3. lib/register.lib.php 파일 수정


function valid_mb_id($reg_mb_id)
{
    if (preg_match("/[^0-9a-z_]+/i", $reg_mb_id))
        return "회원아이디는 영문자, 숫자, _ 만 입력하세요.";
    else
        return "";
}
 

위 내용을 이렇게 변경


function valid_mb_id($reg_mb_id)
{
    if (!preg_match("/([0-9a-zA-Z_-]+)@([0-9a-zA-Z_-]+)\.([0-9a-zA-Z_-]+)/", $reg_mb_id))
        return "아이디는 이메일 주소로 사용합니다.\n이메일 주소를 올바르게 입력해 주십시오.";
    else
        return "";
}
 


4. js/jquery.register_form.js 파일 수정


아이디 체크 부분에서 빨간색 부분 삭제하거나 주석 처리하고 바로 윗줄 추가


"reg_mb_id": $("#reg_mb_id").val() // 추가됨
// "reg_mb_id": encodeURIComponent($("#reg_mb_id").val())
 


위치 참고 스샷


8110db7b856293994d1d79a98bc2e513_1542881392_8963.gif 




5. g5_member 테이블에서 mb_id 필드 타입 변경


b9fb32b983794bbd41e213b9aa93360b_1521615544_5344.gif


기본 값이 짧아서 이메일 입력 용도에는 맞지 않을 겁니다.

기존 이메일 필드와 동일하게 varchar(255) 정도로 변경하세요.


5-1. 추가 내용


오랜만에 이 팁을 다시 살펴봤는데 필드 타입 변경을 g5_member 테이블만 해서는 안 되겠네요.

- 포인트 테이블(mb_id, po_rel_id)

- 게시판 테이블 (mb_id)

- 쪽지 테이블 (me_recv_mb_id, me_send_mb_id)

스크랩, 1:1문의 등등 너무 많네요.

저런 부분 회원 아이디도 모두 varchar(20)으로 되어 있습니다.

이메일 주소가 20자가 넘으면 저런 곳들도 회원 아이디 값이 정상적으로 저장이 안 되겠네요.


수정하기 번거로우면 이메일 주소 길이가 20자가 넘으면 가입을 차단하는 방법도 있는데

이메일 도메인까지 하면 20자는 짧은 감이 있습니다.


전부 찾아서 수정할 자신이 없으면 20자 제한을 그대로 유지하세요.

처음 시작 부분 1-1 내용에서 maxlength="20" 을 변경하지 말고 그대로 유지.


* js 파일을 수정했기 때문에 반영이 제대로 안 된다면 웹브라우저에서 캐시를 삭제하고 확인하세요.




## 추가 내용 ##


그누보드 5.3.1.8 이후 버전을 사용 중이라면 체크해야 할 부분이 더 있습니다.

https://github.com/gnuboard/gnuboard5/commit/7524d291889eb9bd5479e342a4d3090c2dcbe129

아이디 값에서 특수 문자는 제거하는 코드가 추가되었는데 해당 부분을 다시 주석 처리해야 사용할 수 있습니다.


수정 파일 : /lib/common.lib.php


// 회원 정보를 얻는다.
function get_member($mb_id, $fields='*')
{
    global $g5;
   
    // $mb_id = preg_replace("/[^0-9a-z_]+/i", "", $mb_id);

    return sql_fetch(" select $fields from {$g5['member_table']} where mb_id = TRIM('$mb_id') ");
}

댓글목록 +13

댓글목록

profile_image

부렁님의 댓글

부렁 작성일

팁으로 올려주셔서 감사합니다.
그런데 다 적용하고 테스트 해보니 bbs/register_form_update.php 에서

if(!$mb_id)
    alert('회원아이디 값이 없습니다. 올바른 방법으로 이용해 주십시오.');

이 부분이 뜨더라고요.
이메일 값을 mb_id에 저장했으니 주석/삭제 처리하기도 그렇고 뭔가 조금 잘못된 것 같은데 어떻게 해야할까요?

profile_image

관리자님의 댓글의 댓글

관리자 작성일

여러 번 다시 해봤지만 문제없이 잘 됩니다. 수정을 잘 못 하신 것 같습니다.

profile_image

부렁님의 댓글의 댓글

부렁 작성일

집념으로 찾아냈습니다 -_-ㅋ
그리고 계정분실(password_lost, password_lost2) 관련해서 기존 email로 되어있던데 수정이 필요하지 않을까요?

profile_image

관리자님의 댓글의 댓글

관리자 작성일

해당 부분과는 관련이 없습니다. 이메일 필드에도 이메일 주소는 그대로 저장됩니다.

profile_image

anj님의 댓글

anj 작성일

저는왜 안될까요..http://~~~~~~~~/bbs/register_form_update.php 페이지에서 안넘어가는데 ㅠㅠ

profile_image

지티알님의 댓글

지티알 작성일

js/jquery.register_form.js 파일에는

"reg_mb_id": encodeURIComponent($("#reg_mb_id").val())
이 부분이 총 4군데 있습니다.

reg_mb_id_check
reg_mb_nick_check
reg_mb_email_check
reg_mb_hp_check

이중 reg_mb_id_check만 바꿔서 정상 처리되던데...
나머지 3군데는 변경하지 않아도 되는지

profile_image

관리자님의 댓글의 댓글

관리자 작성일

네 4번 항목에 있는 저 부분만 변경하면 됩니다.

profile_image

지티알님의 댓글

지티알 작성일

아이디를 이메일로 변경 후

회원가입 시
이름.닉네임,이메일  입력칸에서 이메일을 아이디와 다른것을 입력하여도,
실제 가입자 인증 메일은 아이디에 입력한 이메일로 전송됩니다.


회원입력 폼에서 이메일 입력자체가 필요없을듯한데...필수항목이라 제외를 어떻게 하면 될까요?

profile_image

관리자님의 댓글의 댓글

관리자 작성일

본문 내용을 보면 가입폼에서 삭제하라고 되어있습니다.
1-2. 이메일 입력 부분 삭제

profile_image

지티알님의 댓글의 댓글

지티알 작성일

네~~
감사합니다.

제대로 처리를 못했네요~

profile_image

dkdlel님의 댓글

dkdlel 작성일

똑같이 따라했는데 왜 안될까요?ㅠㅠ

모든 양식을 갖춰 입력했는데도 첨부한 사진과같은 메세지가 뜨고, 심지어 주석처리한 코드부분까지 출력이 됩니다.

<?php // 내용 ?> 이렇게 주석처리를 하면 뜨지않는데 html형식으로 주석처리를 하면 왜 출력이 되는걸까요?

코드내용입니다.

 <?php //--lib/register.lib.php ?>

<?php
if (!defined('_GNUBOARD_')) exit;

function empty_mb_id($reg_mb_id)
{
    if (trim($reg_mb_id)=='')
        return "회원아이디를 입력해 주십시오.";
    else
        return "";
}

function valid_mb_id($reg_mb_id)
{
    if (preg_match("/([0-9a-zA-Z_-]+)@([0-9a-zA-Z_-]+)\.([0-9a-zA-Z_-]+)/", $reg_mb_id))
        return "아이디는 이메일 주소로 사용합니다.\n이메일 주소를 올바르게 입력해 주십시오.";
    else
        return "";
}


저 if문에서 자꾸 걸려서 안내메세지가 뜨는 것 같은데, 제대로 양식을 갖췄는데 왜자꾸 걸리는 것일까요..? ㅠㅠ 좋은답변기다리고있겠습니다.

profile_image

관리자님의 댓글의 댓글

관리자 작성일

저건 팁 내용과 관련이 없으며 원본 상태에서 테스트해보면 다른 부분에서도 마찬가지로 출력됩니다.
주석이 필요하다면 php 구문으로 처리해야 합니다.
그리고 질문이 올라오면 매번 다시 해보는데 그누보드 원본 기준으로 본문 내용과 똑같이 적용했을 때 지금도 잘 되고 있습니다.

profile_image

dkdlel님의 댓글의 댓글

dkdlel 작성일

헉 ㅠㅠ 그러면 왜자꾸 if문에서 걸리는것일까요.. 본문에 올라온 것 이외에 수정한내용이없는데..ㅠ

로그인 후 댓글 작성 가능합니다.

로그인

로그인 후 글 작성 가능합니다.
그누스킨닷컴

그누스터디는 그누보드, 영카트를 이용하시는 초보 사용자를 위한 정보를 공유합니다.

E-MAIL : gnustudy@naver.com / 카카오톡 : gnustudy / 텔레그램 : gnustudy
제작 문의를 제외한 일반 문의는 QA 게시판을 이용해주세요.

Copyright gnustudy.com All rights reserved.