user_id 와 Email 로그인을 동시에 사용하는 방법.
이 방법은 조금 어려운 전문적인 지식이 들어갈 수 있으므로, 서버관리에 초보적이신 분들은 잘보시고 따라하시거나, 따라하지 않을것을 권고합니다..(_ _ )
그리고 회원 아이디 설정을 반드시, "아이디"에 두셔야 이 방법이 가능합니다. 로그인계정을 아이디로 쓰시길 권장하고, 회원가입시 아이디도 함께 받으시길 권고합니다.
우선 XE의 Ruleset을 먼저 우회를 시켜야 합니다. 왜냐하면 로그인을 할경우 로그인에 사용되는 아이디가, 영문+숫자+_ 문자만 인식하도록 되어있어서 이 부분의 경우 문제가 생길 수 있기 때문이지요. 이경우는 보통 회원가입시에만 룰셋을 적용해주면 된다고 생각합니다, 그래서 로그인에 사용되는 룰셋부터 먼저 제거해야하죠.
(이 우회하는 방법으로는 @기진곰 님께서 저에게 XETown Slack 을 통해서 알려주셨습니다. 감사합니다.)
xe/modules/member/member.admin.controller.php 파일에서 _createLoginRuleset() 이라는 메소드가 있습니다.
해당 메소드는 로그인을 할때 로그인 룰셋파일을 만들어주는 역활합니다. 그래서 해당 파일이 보통 files/ruleset에 저장됩니다.
그래서 먼저 560번째줄의
$trans = array('email_address'=>'email', 'user_id'=> 'userid');
해당 코드를
$trans = array('email_address'=>'', 'user_id'=> '');
으로 수정해줍니다.( 삭제가 아닌 수정입니다. )
해당 필터에 대해 룰셋을 강제적으로 적용하지 않는것을 의미한다고 생각하면 됩니다.
그리고, 룰셋을 담당하는 파일이 아래 두곳입니다.
files/ruleset/login.xml
files/cache/ruleset/*.js
위에꺼는 아까 메소드에서 생성된 파일이기 떄문에 반드시 제거해야하하고, 아래꺼는 캐시파일으로써 저장되는 .js파일인데, 케시파일 재생성으로도 해결가능할지도 모릅니다. 혹시나 모르니, SSH접속하셔서 삭제 하시길 권고합니다.
그리고 ruleset/login.xml 파일이 삭제가 되어, 관리자 페이지에 접속하게 되면 member모듈을 업데이트 하라고 나옵니다. 해당 업데이트 하시면 됩니다.
여기까지 오셨으면 우회는 마무리입니다.
자 지금부터는 member.controller.php파일에서 작업합니다.
xe/modules/member/member.controller.php 파일에서, 로그인을 담당하는 doLogin을 수정할 예정입니다.
1672번째줄에
$user_id_strpos = strpos($user_id, '@');
을 추가합니다. 해당 코드는 user_id값을 받은 것에 @ 가 있는지 없는지를 검사하는 코드입니다.
@가 있으면 해당 위치의 숫자를, 없을경우 false 를 반환하는 함수이지요.
그리고 아래쪽
// check identifier if($config->identifier == 'email_address') { // Get user_id information $this->memberInfo = $oMemberModel->getMemberInfoByEmailAddress($user_id); // Set an invalid user if no value returned if(!$user_id || strtolower($this->memberInfo->email_address) != strtolower($user_id)) return $this->recordLoginError(-1, 'invalid_email_address'); }
가 있는데 이 부분을
// check identifier if($config->identifier == 'email_address' || $user_id_strpos !== false) { // Get user_id information $this->memberInfo = $oMemberModel->getMemberInfoByEmailAddress($user_id); // Set an invalid user if no value returned if(!$user_id || strtolower($this->memberInfo->email_address) != strtolower($user_id)) return $this->recordLoginError(-1, 'invalid_email_address'); }
이렇게 바꿔주시면 됩니다. if문에 || $user_id_strpos !== false 추가됩니다.
이렇게 수정해두시면, 로그인 아이디 및 이메일을 동시에 사용가능합니다~
기진곰님 다시한번 도움주셔서 감사합니다
댓글 9
if문 수정하는 곳에..
if($config->identifier == 'email_address' || strpos($user_id, '@') !== false)
이렇게 하셔도 됩니다.
https://github.com/rhymix/rhymix/pull/4
그래도 이메일로 로그인하라는데 뭐때문일가요 ㅠㅠ