OpenPNE o_login slavepne 프로세스 분석 by Vins

OpenPNE 로그인 구성 (심포니 프레임워크 설명 배제)

1. 메인화면에서 아이디/패스 입력
2. OpenPNE/webapp/modules/pc/do/o_login.php 의 do_o_login class의 execute 실행
3. get_auth_config() (/webapp/lib/util/util.php) 호출하며 /OpenPNE/config.php에서 설정한 글로벌 변수 인식
4. $auth = new OpenPNE_Auth($config) 호출 (webapp/lib/OpenPNE/Auth.php)
  • /OpenPNE/config.php에서 설정한 정보 직렬화
  • /OpenPNE/lib/include/Auth.php 객체 호출 .. new Auth(....);
5. $auth->logout(); 현재 남아 있을지도 모르는 세션 종료
6. LOGIN_CHECK_ENABLE (세션 유효기간 체크 로직 - 설명 패스)
7. $auth->login($requests['is_save']) 입력 받은 정보 로그인 실행
  •  $this->auth =& $this->factory(true);
  • factory 내부에서 $auth = new Auth($this->storage, $this->options, '', false); 실행
  • /OpenPNE/lib/include/Auth.php의 Auth Class는 1,2,3,4에 걸친 입력을 직렬화하여 하나의 클래스에 저장
  • 이후 1에서 입력 받은 아이디를 소문자로 치환한 후 암호화 실행
  • $this->auth->start() 실행 (/OpenPNE/lib/include/Auth.php)
  • start()메서드에서는 유니크세션키를 발생시키고 assignDate() 실행
  • assignDate()에서 유저로 부터 입력 받은 ID/PW의 get_magic_quotes_gpc 후 stripslashse 실행
  • start()메서드에서 다시 login() 실행
  • login()메서드에서 Auth_Container_DB() 객체의 fetchDate(userID, userPW, $userChap) 실행
  • Auth_Container_DB class는 /OpenPNE/lib/include/Auth/Container/DB.php에 있음
  • 생성된 Login Query 실행 (내부적으로 imbeded query 생성)
  • Auth Class에 리턴받은 데이터 각 항목에 세팅
8. $auth->getUsername() 으로 slavepne ID와 c_member 테이블 ID매칭 검색(c_member_secure테이블))
9. 로그인 인증되면 auth.inc에서 각 페이지의 세션 체크 (getUsername()으로 체크)

pc와 mobile에서 인증절차가 다를 경우라면 추가적으로 다음 프로세스를 실행해야 한다

10. 만일 config.php에서 db_fields를 사용하여 다른 데이터로 매칭 시키고 싶을 경우
      8, 9번 항목에서 사용된 $auth->getUsername() 이 아니라 다른 메서드를 생성해야함
      PC에서와 MOBILE에서 로그인 아이디가 다른 웹 사이트를 작업하고 있는
      프로젝트라면
      선략....
      'usernamecol' => 'ktaiID',

      'passwordcol' => 'ktaiPW',
      'db_fields' => array('cpid'),
      'cryptType' => 'md5',
      후략 .
     db_fields에 세팅된 값들을 Select usernamecol, passwordcol, db_fields[] from slaveAuthInfo ....후략
     세팅되므로 OpenPNE_Auth에서 Auth Class에 getSessionName을 가져올수 있다록
     메서드를 하나 더 생성해야 함
11. 나의 경우엔 /OpenPNE/webapp/lib/OpenPNE/Auth.php 즉 OpenPNE_Auth Class에 다음과 같은 메서드를 생성하였다

/**

* Auth에서 session값을 반환하도록 메서드 생성
*
* return string (2010/02/16 by yhan@gungho.jp
*/
function getSessionName($sessname) {
     return $this->auth->getAuthData($sessname);
}

이를 $auth->getUsername() 대신 $auth->getSessionName("cpid") 로 바꾸어주는데
바꾸여하 할 부분은
/OpenPNE/webapp/modules/ktai/auth.inc 에서 한군데와
/OpenPNE/webapp/modules/ktai/do/o_login.php 에서 한군데 씩 바꾸면 된다


OpenPNE라고 OpenSource를 지향하고 있지만 클래스 내부를 뜯어볼때
아직 향후 많은 부분이 보완되어야 할 것이다
하지만 지금 자체만으로도 한국업체가 일본에서 SNS를 하고 싶다면
꼭 분석해봐야 할 좋은 재료라고 하고 싶다.
한국에서 당연시 여기었던 블로그등 지금까지 익숙해져 있던것에 근거하여
기획하고 디자인하고 개발한다면
대부분 한국계열 SNS가 그래 왔던것 처럼 고전을 면치 못할 것이기 때문이다.

NHN의 쿠루쿠루가 그랫고 싸이월드 재팬이 망했으며
한국식 블러그 사이트를 들고와서 성공해 보겠다고 저마다 기업들이 아우성치고 있지만
성공하고 있는 업체가 하나도 없듯이 말이다.

팁을 하나 귓뜸해 주자면 일본의 최대 SNS사이트인 mixi나 gree 등 유저의 접속자 수의
90% or 99%가 PC도 아닌 스마트폰도 아닌 조그만 화면의 휴대폰에서 이루어진다는
사실이다
일본 의류 쇼핑몰의 경우에도 다르지 않다 휴대폰을 통한 매출이 절대적이기 때문이다.

혹시 일본에서 활동하고 있는 한국에 SNS 또는 게임 사이트를 운영하는 운영자라면
꼭 한번 생각해봐야 한다 .

이제 ceolikeproject 를 그만둘때도 되었다
기획자라면 한국적인 사고방식에서 떠나 일본유저의 눈에 마출수 있는 기획을 (네이버 그만좀 베겨라..)
디자이너라면 절대 자부심을 가지지마라 한국에서 디자인과 일본의 디자인 그 시작부터가 다르다 .
플래쉬 도배해 놓고 "나 좀 하지!!" 하고 자만하지마라 유저는 진정 플래쉬를 원하지 않는다
마지막으로 개발자 머리속에서 "주민번호" 부터 지워라
회원가입시 주민번호가 당연한 유니크 체크라고 생각하는 순간 ...
당신은 우물안에 개구리 ....

By Vins