BOARD

팁·활용

그누보드 회원 아이디 체계를 이메일 주소로 변경하는 방법

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 16회 작성일 26-09-29 16:06

본문

그누보드 회원 아이디 체계를 이메일 주소로 변경하는 방법

그누보드 회원 아이디를 이메일 주소 형식으로 변경하고 로그인까지 연동하는 방법과 연관 테이블 수정 시 주의사항을 알아봅니다.

그누보드 회원 아이디 체계를 이메일 주소로 변경하는 방법

그누보드에서 회원가입 및 로그인 시 아이디 대신 이메일 주소를 사용하도록 설정하려면 스킨 파일, 데이터 처리 파일, 유효성 검사 함수, 자바스크립트 및 데이터베이스 테이블을 수정해야 합니다.

1. 스킨 파일 수정

skin/member/basic/register_form.skin.php 파일을 수정합니다. (모바일 스킨도 사용하는 경우 해당 파일도 별도로 수정합니다.)

  • 아이디 입력 영역 수정: 안내 문구와 최대 글자수 제한을 이메일 길이에 맞게 변경합니다. 예시로 maxlength="100" 등으로 설정합니다.
<span class="frm_info">이메일 주소를 입력하세요. 아이디는 이메일 주소로 사용됩니다.</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="100">
  • 기존 이메일 입력 부분 전체 삭제: 중복 수집을 방지하기 위해 기존 E-mail 입력 항목 테이블 행(<tr>... </tr>) 전체를 삭제합니다.
  • 하단 스크립트의 이메일 검사 부분 삭제: 파일 하단의 스크립트 중 E-mail 검사 구문을 삭제합니다.
// 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 파일을 수정합니다.

  • 이메일 변수 대입 변경:
$mb_email = trim($_POST['mb_id']);
  • 이메일 유효성 검사 주석 처리:
// 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);
  • 세션 검증 코드 수정: 세션 비교 조건에서 get_session('ss_check_mb_email')!= $mb_email 부분을 삭제합니다.
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 파일의 valid_mb_id 함수를 이메일 정규식 검사로 변경합니다.

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())

(참고: JS 수정 후 반영이 안 될 경우 웹브라우저 캐시를 삭제하고 확인합니다.)

5. 데이터베이스(DB) 필드 타입 변경 및 유의사항

g5_member 테이블의 mb_id 필드 기본 크기가 짧으므로 기존 이메일 필드와 동일하게 varchar(255) 등으로 변경해야 합니다.

  • 연관 테이블 확인: g5_member 테이블뿐만 아니라 회원 아이디(mb_id)를 저장하는 포인트 테이블, 게시판 테이블, 쪽지 테이블, 스크랩, 1:1 문의 등 관련 테이블의 필드도 함께 수정할 필요가 있습니다. 전부 찾아서 수정하기 번거롭고 20자를 초과하는 이메일 주소 호환성 문제가 우려된다면 스킨의 maxlength="20" 제한을 그대로 유지할 수도 있습니다.

6. 그누보드 5.3.1.8 이후 버전 추가 조치

5.3.1.8 이후 버전을 사용 중이라면 아이디에서 특수문자를 제거하는 코드가 추가되어 있으므로 해당 부분을 주석 처리해야 합니다.

  • 수정 파일: /lib/common.lib.php의 get_member 함수
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') ");
}

데이터베이스 회원 아이디(mb_id) 필드 확장 안내

회원 아이디 체계를 이메일 주소로 변경할 때, 기본 설정된 g5_member 테이블의 mb_id 필드 타입인 varchar(20)은 긴 이메일 주소를 수용하기에 부족할 수 있습니다. 따라서 이메일 주소가 기본 길이 제한을 초과하여 저장될 때 발생할 수 있는 데이터 유실이나 오류를 방지하기 위해 관련 테이블과 필드를 함께 수정해야 합니다.

수정 대상 테이블 및 필드

g5_member 테이블뿐만 아니라 mb_id를 참조하는 연관 테이블들의 필드 타입도 기존 이메일 필드와 동일하게 varchar(255) 수준으로 확장해야 합니다.

  • 회원 테이블: g5_member (mb_id 필드)
  • 포인트 테이블: 포인트 관련 데이터 저장 시 mb_id, po_rel_id 필드
  • 게시판 테이블: 게시글 작성자 정보 등을 저장하는 mb_id 필드
  • 쪽지 테이블: 쪽지 수·발신자를 관리하는 me_recv_mb_id, me_send_mb_id 필드
  • 기타 테이블: 스크랩, 1:1 문의 등 회원 아이디를 기록하는 연관 테이블들의 mb_id 필드

주의 사항 및 대안

  • 연관된 모든 테이블을 찾아 수정하기 번거롭거나 전체 수정에 자신이 없다면, 이메일 주소 길이가 20자를 초과할 때 가입을 차단하는 방식을 유지할 수 있습니다. 다만 이메일 도메인 주소 길이를 고려할 때 20자는 짧을 수 있으므로 운영 환경에 맞게 판단해야 합니다.
  • 데이터베이스 구조 변경 작업을 진행하기 전에는 반드시 회원 DB 테이블인 g5_member를 포함한 관련 데이터를 백업한 뒤 진행하는 것을 권장합니다.

그누보드 5.3.1.8 이후 버전 특수문자 제거 로직 조치 방법

그누보드 5.3.1.8 이후 버전을 사용 중인 환경에서 아이디를 이메일 형식으로 변경할 때 @, . 등의 특수문자가 포함되어 가입이 차단되는 현상이 발생할 수 있습니다. 이는 최신 버전의 공통 라이브러리 파일에 아이디 값의 특수문자를 제거하는 코드가 추가되었기 때문입니다.

수정 위치 및 방법

  1. /lib/common.lib.php 파일을 엽니다.
  2. 회원 정보를 얻는 get_member 함수 안에서 특수문자를 제거하는 코드를 찾아 주석 처리합니다.
// 회원 정보를 얻는다.
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') ");
}

다음 행동

  • 위 코드를 주석 처리한 뒤 웹브라우저 캐시를 삭제하고 이메일 형식의 아이디로 회원가입 및 로그인을 다시 테스트하여 정상 작동하는지 확인합니다.

그누보드 회원 아이디 이메일 체계 변경 가이드

회원 아이디를 이메일 형식으로 변경할 때는 사이트 운영 상황에 따라 다음 기준을 선택하십시오.

  • 신규 사이트 구축 시: 스킨 파일(register_form.skin.php), 처리 파일(register_form_update.php), 유효성 검사(lib/register.lib.php)를 수정하고, 5.3.1.8 이후 버전은 /lib/common.lib.php의 특수문자 제거 로직을 주석 처리하십시오.
  • 기존 회원 데이터가 있는 경우: g5_member 테이블뿐만 아니라 포인트, 게시판, 쪽지 등 mb_id를 참조하는 모든 테이블의 필드 타입을 varchar(255)로 확장해야 데이터 유실을 방지할 수 있습니다.
  • 수정 후 오류 발생 시: register_form_update.php의 세션 검증 로직에서 이메일 세션 비교(ss_check_mb_email) 코드가 남아있는지 확인하고 제거하십시오.

실전 FAQ

Q. 연관 테이블의 mb_id 필드를 모두 수정해야 하나요?

  • 실행 중 막히는 점: g5_member 테이블만 수정하고 포인트, 게시판, 쪽지 등 연관 테이블의 mb_id 필드(기본 varchar(20))를 그대로 두면, 20자를 초과하는 이메일 주소 저장 시 데이터 오류가 발생합니다.
  • 대안: 모든 테이블 수정이 번거롭다면 스킨 파일의 maxlength를 20으로 유지하여 긴 이메일 가입을 제한할 수 있습니다.

Q. 5.3.1.8 이후 버전에서 아이디 유효성 검사 오류가 발생합니다.

  • 예외: 최신 버전의 /lib/common.lib.php 내 get_member 함수에는 아이디의 특수문자를 강제 제거하는 코드가 포함되어 있습니다. @와 .이 포함된 이메일 주소가 이 로직에 의해 차단되므로 해당 라인을 주석 처리해야 합니다.

함께 보면 좋은 글

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.