회원가입시 아이디를 숫자 가입허용

교교 2015.02.25 17:35:50

https://www.xpressengine.com/index.php?mid=tip&search_target=title_content&search_keyword=%EC%95%84%EC%9D%B4%EB%94%94&document_srl=22803787

 

xe 코드를 그냥 분석하고 실험으로 알아낸 해결방법은 다음과 같습니다. XE 에서 로그인 아이디를 두번 검사하고 있으며 각각 경고창을 띠워 주고 있었습니다.


1)  파일: ./common/js/xml_js_filter.js 
수정위치: 라인번호 26, //predefined rules 에서 userid 지정하는 라인
수정 전 :  'userid' => '/^[a-z]+[\w-]*[a-z0-9_]+$/i'
수정 후 : 'userid' => '/^[0-9a-zA-Z]+[\w-]*[a-z0-9_]+$/i'

최신버전 xe에서는 압축유틸리티 minify를 이용하고 있었습니다. 수정해야 할 대상은 xml_js_filter.js 이지만 실제로는 xe.js 로 합친 후 minify로 압축한 xe.min.js을 변경해 주어야 xe 에 실제로 반영되는 것입니다.

xe.js는 common.js + js_app.js + xml_handler.js + xml_js_filter.js 를 합친 것이며, xe.js 를 minify로 압축하여 만들어 진 것이 xe.min.js입니다. 실제 실행시 사용되는 파일은 xe.min.js이므로 xml_js_filter.js를 수정한 후에 minify를 이용하여 xe.min.js를 만들어 주어야 한다.

(1) xml_js_filter.js와 xe.js에서 동일하게 [0-9a-zA-Z]와 같이 수정해 주고

(2) minify를 다운로드 받아서 홈페이지에 설치하고

(3) minify를 실행시켜 xe.min.js를 만들어 주었습니다.

  • 수정결과

위와 같이 수정한 결과 로그인시 경고창이 없어졌지만 2차로 상단에 같은 경고문으로 잠시후 사라지는 경고창이 떳습니다. 물론 로그인도 안되면서... 다시 xe를 분석하여 다음 사항을 찾아 수정하게 되었습니다.

2)  파일: ./classes/validator/Validator.class.php 

수정위치: 라인번호 90, //predefined rules 에서 userid 지정하는 라인
수정 전 : 'userid' => '/^[a-z]+[\w-]*[a-z0-9_]+$/i'
수정 후 : 'userid' => '/^[0-9a-zA-Z]+[\w-]*[a-z0-9_]+$/i'

위와 같이 수정한 결과 로그인시 2차 경고창이 없어지고 정상적인 로그인이 가능하게 되었습니다. 코드를 보면 수정하기 전에는 아이디 첫글자는 반드시 영문 소문자만 가능하도록 되어 있었습니다. 수정후에는 숫자, 영소문자, 영대문자로 시작하더라도 로그인과정을 통과할 수 있게 되었습니다.