회원 아이디를 이메일 주소로 가입 및 로그인
회원 가입할 때 아이디를 이메일 주소로 사용하는 방법입니다.
로그인할 때도 이메일 주소를 입력해서 로그인할 수 있습니다.
꼭 필요한게 아니라면 웬만하면 수정하지 마시고 그누보드 원본 그대로 사용하는 게 좋습니다.
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())
위치 참고 스샷
5. g5_member 테이블에서 mb_id 필드 타입 변경
기본 값이 짧아서 이메일 입력 용도에는 맞지 않을 겁니다.
기존 이메일 필드와 동일하게 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
댓글목록
부렁님의 댓글
부렁 작성일
팁으로 올려주셔서 감사합니다.
그런데 다 적용하고 테스트 해보니 bbs/register_form_update.php 에서
if(!$mb_id)
alert('회원아이디 값이 없습니다. 올바른 방법으로 이용해 주십시오.');
이 부분이 뜨더라고요.
이메일 값을 mb_id에 저장했으니 주석/삭제 처리하기도 그렇고 뭔가 조금 잘못된 것 같은데 어떻게 해야할까요?
관리자님의 댓글의 댓글
관리자 작성일여러 번 다시 해봤지만 문제없이 잘 됩니다. 수정을 잘 못 하신 것 같습니다.
부렁님의 댓글의 댓글
부렁 작성일
집념으로 찾아냈습니다 -_-ㅋ
그리고 계정분실(password_lost, password_lost2) 관련해서 기존 email로 되어있던데 수정이 필요하지 않을까요?
관리자님의 댓글의 댓글
관리자 작성일해당 부분과는 관련이 없습니다. 이메일 필드에도 이메일 주소는 그대로 저장됩니다.
anj님의 댓글
anj 작성일저는왜 안될까요..http://~~~~~~~~/bbs/register_form_update.php 페이지에서 안넘어가는데 ㅠㅠ
지티알님의 댓글
지티알 작성일
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군데는 변경하지 않아도 되는지
관리자님의 댓글의 댓글
관리자 작성일네 4번 항목에 있는 저 부분만 변경하면 됩니다.
지티알님의 댓글
지티알 작성일
아이디를 이메일로 변경 후
회원가입 시
이름.닉네임,이메일 입력칸에서 이메일을 아이디와 다른것을 입력하여도,
실제 가입자 인증 메일은 아이디에 입력한 이메일로 전송됩니다.
회원입력 폼에서 이메일 입력자체가 필요없을듯한데...필수항목이라 제외를 어떻게 하면 될까요?
관리자님의 댓글의 댓글
관리자 작성일
본문 내용을 보면 가입폼에서 삭제하라고 되어있습니다.
1-2. 이메일 입력 부분 삭제
지티알님의 댓글의 댓글
지티알 작성일
네~~
감사합니다.
제대로 처리를 못했네요~
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문에서 자꾸 걸려서 안내메세지가 뜨는 것 같은데, 제대로 양식을 갖췄는데 왜자꾸 걸리는 것일까요..? ㅠㅠ 좋은답변기다리고있겠습니다.
관리자님의 댓글의 댓글
관리자 작성일dkdlel님의 댓글의 댓글
dkdlel 작성일헉 ㅠㅠ 그러면 왜자꾸 if문에서 걸리는것일까요.. 본문에 올라온 것 이외에 수정한내용이없는데..ㅠ