묻고답하기
인증메일 재발송시 특정도메인의 이메일만 허용하는 방법.
2012.09.17 18:18
회원가입시, 그리고 회원정보에서 이메일변경시
특정 도메인의 이메일만 입력을 허용하고 있습니다.(특정도메인의 이메일로만 인증가능)
그동안 문제없이 잘 사용해 왔는데
이번에 1.5.3.1 부터 (확실하진 않음) 새롭게 도입된 '인증메일재발송' 에서
'신규 메일 주소로 변경 후 인증 메일 발송' 부분에도
특정 도메인의 이메일만 입력을 허용하려고 합니다.
(참고로 밑에 그림과 같은 화면이 나오게 하려면 회원가입 후 인증메일 받지 않은 상태에서 로그인 하시면
해당 화면이 나오게 됩니다.)
참고로 회원가입시 특정이메일만 허용하게 하는 방법은 아래 방법을 사용하고 있습니다.
/modules/member/member.controller.php 파일을 보시면 아래와 같은 부분이 있습니다.
// 아이디, 닉네임, email address 의 중복 체크
$member_srl = $oMemberModel->getMemberSrlByUserID($args->user_id);
if($member_srl) return new Object(-1,'msg_exists_user_id');
$member_srl = $oMemberModel->getMemberSrlByNickName($args->nick_name);
if($member_srl) return new Object(-1,'msg_exists_nick_name');
$member_srl = $oMemberModel->getMemberSrlByEmailAddress($args->email_address);
if($member_srl) return new Object(-1,'msg_exists_email_address');
이 아래에 이 부분을 추가시켜 줍니다.
// email address 도메인을 abc.com 로 고정시킴
$args->email_host = strtolower($args->email_host);
if($args->email_host != 'abc.com') return new Object(-1,'msg_uks');
에러 메시지의 처리의 경우
/modules/member/lang/lang.php에다가
<item name="msg_uks">
<value xml:lang="ko"><![CDATA[@abc.com 으로만 가입이 가능합니다.]]></value>
</item>
감사합니다 ^^
댓글 2
-
송동우
2012.09.17 19:00
-
카이닉스
2012.09.17 20:06
동우님 해봤는데 먹히질 않습니다. 그리고 저는 line 2096이 아니라 2020쯤에 $newEmail = Context::get('email_address'); 이 있네요. ㅠ -
카이닉스
2012.09.17 20:08
물론 3줄 추가한게 있긴 하지만 그걸 감안해도 많이 다르네요.. $newEmail = Context::get('email_address'); 이거 위에 $member_info = Context::get('logged_info'); 바로 이거 있는거 맞죠? -
카이닉스
2012.09.17 20:11
1.5.3.1 사용중이고... 아마 제가 잘못한것 같은데.. 왜이럴까요.. 기다리고 있겠습니당 ㅠ -
송동우
2012.09.17 20:21
우연히 사용자 포럼에 있는 글을 보고
대충 질문의 요점을 파악했습니다.
여기 질문보다는 차라리 포럼의 글을 링크하는 것이 더 좋을 뻔 했습니다.....
아무튼
abc@abc.com으로 가입을 하고
인증을 하지 않은 상태에서 다른 이메일로 새롭게 인증메일을 보낼때....
수정하는 방법은....
xe - modules - member - member.controller.php 열고
line 1185 쯤에
function _sendAuthMail($auth_args, $member_info)
{이것 아래에
$emailHost = explode("@", $member_info->email_address);
if($emailHost[1]!='abc.com') return $this->stop('abc.com only');이것 삽입.....
원하는 이메일 호스트가 아니면 새로운 이메일로 인증보내도 안된다는 메세지 나타납니다.
단,
관리자 페이지에 가서 보면
이메일은 변경이 되어 있습니다.
다시 말해서
abc.com 이것만 허용을 했을 때
손님이 처음에
abc@abc.com 으로 가입하고 인증을 안한 상태에서
다시 다른 이메일 abc@xyz.com 으로 인증요청을 할 때
abc.com 이것만 된다고 메세지가 나타나고 메일이 보내지지 않습니다만
관리자 페이지에 가서 회원 정보를 보면 abc@xyz.com 으로 변경이 되어 있습니다.
이것도 안바뀌게 하려면 또 수정을 해주면 되겠지만
누가 장난질을 하는지 확인을 하기 위해서는 그대로 두는 것이 좋을 것도 같아서
그것에 대한 것은 언급 안했습니다.....
참고로
의견란에 있는 글에 대한 것은.......
수정을 전혀 하지 않은 상태에서의 라인수 입니다.
그리고 똑같은 코드가 경우에 따라 위쪽에 그리고 아랫쪽에
혹은 여러군데에 존재합니다........
간혹 그런 문제로 다른 곳에 적용을 하곤하여 안된다고 하는 경우도 있습니다....
function procMemberModifyEmailAddress() 함수 속에 있습니다....
아무튼 적용해 보시고
의견 남기면 또 찾아보도록 하죠.........
-
카이닉스
2012.09.17 21:59
말주변이 워낙 없다보니 글을 통해서 설명을 하려 해도 많이 뒤죽박죽입니다ㅠ 이럴줄 알았으면 책 좀 많이 읽어둘걸 그랬습니다. 알려주신대로 적용을 해보았습니다만 역시나 전혀 작동을 하고 있지 않습니다. -
카이닉스
2012.09.17 22:01
하지만 왜 라인수가 차이가 났는지는 알아냈습니다. 저는 1.5.3.1 핫픽스 버전을 사용하고 있는데 동우님은 1.5.3.2 버전을 토대로 설명해 주셔서 그런 것 같습니다. -
카이닉스
2012.09.17 22:02
1.5.3.2 버전을 다운받아서 해당 라인을 보니 정확히 맞았지만 제가 가지고 있는 1.5.3.1핫픽스 버전에서 보니 라인수가 많이 차이가 나고 있습니다. -
ToFinder
2012.09.17 23:21
ctrl+f 를 활용해보시지요 ㅎㅎㅎ. 에디트마다 약간의 차이점은 있더군요. 에디트 플러스 기준 핫픽스 버전으로 본다면 1126정도일듯 합니다. 해당 { 후에 송동우님의 글을 넣어주신다면 에러메시지가 발생하여서 등록이 이루어지지 않더군요 ^^ 테스트 해보니 리턴되고 메시지 출력되었으면 좋았을껄 하면서 찾아보더라도 없더군요 ㅠㅠ;
회원가입은 필터링이 잘 된다는 뜻이죠?
그래서 수정하는 곳만 추가하면 된다는 것이죠?
xe - modules - member - member.controller.php 열고
line 2096 쯤에
$newEmail = Context::get('email_address');
이것 바로 아래에
$emailHost = explode("@", $newEmail);
if($emailHost[1]!='abc.com') return $this->stop('abc.com only');
이것 삽입해보세요......