#466 Context class에서 로그인유무 확인후 매번 세션 정보를 새로 갱신하도록 하여 로그인된 회원의 현 정보를 제대로 운영할 수 있도록 코드 변경

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@4159 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2008-04-29 02:32:06 +00:00
parent aa0c4957ad
commit e6a19417ff
4 changed files with 39 additions and 53 deletions

View file

@ -109,24 +109,23 @@
$this->_setRequestArgument(); $this->_setRequestArgument();
$this->_setUploadedArgument(); $this->_setUploadedArgument();
// 인증관련 데이터를 Context에 설정 // 인증 관련 정보를 Context와 세션에 설정
$oMemberModel = &getModel('member'); if(Context::isInstalled()) {
// 인증관련 데이터를 Context에 설정
// 로그인되어 있지 않고 자동로그인 키값이 있으면 자동 로그인 체크 $oMemberModel = &getModel('member');
if(Context::isInstalled() && !$oMemberModel->isLogged() && $_COOKIE['xeak']) {
$oMemberController = &getController('member'); $oMemberController = &getController('member');
$oMemberController->doAutologin();
}
// 로그인되어 있으면 로그인 정보 기록 // 인증이 되어 있을 경우 유효성 체크
if($oMemberModel->isLogged()) { if($oMemberModel->isLogged()) {
$this->_set('is_logged', true); $oMemberController->setSessionInfo();
$this->_set('logged_info', $_SESSION['logged_info']);
// 로그인 되어 있지 않으면 먼저 자동 로그인을 체크 비로그인 상태 기록 // 인증이 되어 있지 않을 경우 자동 로그인 확인
} else { } elseif($_COOKIE['xeak']) {
$this->_set('is_logged', false); $oMemberController->doAutologin();
$this->_set('logged_info', NULL); }
$this->_set('is_logged', $oMemberModel->isLogged() );
$this->_set('logged_info', $oMemberModel->getLoggedInfo() );
} }
// rewrite 모듈사용 상태 체크 // rewrite 모듈사용 상태 체크

View file

@ -775,9 +775,6 @@
// user_id 에 따른 정보 가져옴 // user_id 에 따른 정보 가져옴
$member_info = $oMemberModel->getMemberInfoByMemberSrl($args->member_srl); $member_info = $oMemberModel->getMemberInfoByMemberSrl($args->member_srl);
// 사용자의 전용 메뉴 구성
$member_info->menu_list = $this->getMemberMenuList();
// 로그인 성공후 trigger 호출 (after) // 로그인 성공후 trigger 호출 (after)
$trigger_output = ModuleHandler::triggerCall('member.doLogin', 'after', $member_info); $trigger_output = ModuleHandler::triggerCall('member.doLogin', 'after', $member_info);
if(!$trigger_output->toBool()) return $trigger_output; if(!$trigger_output->toBool()) return $trigger_output;
@ -1168,8 +1165,7 @@
if ($output->data->is_register == 'Y') { if ($output->data->is_register == 'Y') {
$args->password = $output->data->new_password; $args->password = $output->data->new_password;
$args->denied = 'N'; $args->denied = 'N';
} } else {
else {
$args->password = md5($output->data->new_password); $args->password = md5($output->data->new_password);
unset($args->denied); unset($args->denied);
} }
@ -1186,9 +1182,6 @@
// 회원의 정보를 가져옴 // 회원의 정보를 가져옴
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl); $member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
// 사용자의 전용 메뉴 구성
$member_info->menu_list = $this->getMemberMenuList();
// 로그인 성공후 trigger 호출 (after) // 로그인 성공후 trigger 호출 (after)
$trigger_output = ModuleHandler::triggerCall('member.doLogin', 'after', $member_info); $trigger_output = ModuleHandler::triggerCall('member.doLogin', 'after', $member_info);
if(!$trigger_output->toBool()) return $trigger_output; if(!$trigger_output->toBool()) return $trigger_output;
@ -1309,15 +1302,12 @@
} }
// denied_date가 현 시간보다 적으면 알림 // denied_date가 현 시간보다 적으면 알림
if($member_info->limit_date && $member_info->limit_date >= date("Ymd")) return new Object(-1,sprintf(Context::getLang('msg_user_limited'),zdate($member_info->limit_date,"Y-m-d"))); if($member_info->limit_date && substr($member_info->limit_date,0,8) >= date("Ymd")) return new Object(-1,sprintf(Context::getLang('msg_user_limited'),zdate($member_info->limit_date,"Y-m-d")));
// 사용자 정보의 최근 로그인 시간을 기록 // 사용자 정보의 최근 로그인 시간을 기록
$args->member_srl = $member_info->member_srl; $args->member_srl = $member_info->member_srl;
$output = executeQuery('member.updateLastLogin', $args); $output = executeQuery('member.updateLastLogin', $args);
// 사용자의 전용 메뉴 구성
$member_info->menu_list = $this->getMemberMenuList();
// 로그인 성공후 trigger 호출 (after) // 로그인 성공후 trigger 호출 (after)
$trigger_output = ModuleHandler::triggerCall('member.doLogin', 'after', $member_info); $trigger_output = ModuleHandler::triggerCall('member.doLogin', 'after', $member_info);
if(!$trigger_output->toBool()) return $trigger_output; if(!$trigger_output->toBool()) return $trigger_output;
@ -1329,9 +1319,7 @@
$autologin_args->member_srl = $member_info->member_srl; $autologin_args->member_srl = $member_info->member_srl;
executeQuery('member.deleteAutologin', $autologin_args); executeQuery('member.deleteAutologin', $autologin_args);
$autologin_output = executeQuery('member.insertAutologin', $autologin_args); $autologin_output = executeQuery('member.insertAutologin', $autologin_args);
if($autologin_output->toBool()) { if($autologin_output->toBool()) setCookie('xeak',$autologin_args->autologin_key, time()+60*60*24*365, '/');
setCookie('xeak',$autologin_args->autologin_key, time()+60*60*24*365, '/');
}
} }
$this->setSessionInfo($member_info); $this->setSessionInfo($member_info);
@ -1339,24 +1327,30 @@
return $output; return $output;
} }
/**
* @brief 로그인 사용자의 전용 메뉴를 구성
**/
function getMemberMenuList() {
$menu_list['dispMemberInfo'] = 'cmd_view_member_info';
$menu_list['dispMemberFriend'] = 'cmd_view_friend';
$menu_list['dispMemberMessages'] = 'cmd_view_message_box';
$menu_list['dispMemberScrappedDocument'] = 'cmd_view_scrapped_document';
$menu_list['dispMemberSavedDocument'] = 'cmd_view_saved_document';
$menu_list['dispMemberOwnDocument'] = 'cmd_view_own_document';
return $menu_list;
}
/** /**
* @brief 세션 정보 갱싱 또는 생성 * @brief 세션 정보 갱싱 또는 생성
**/ **/
function setSessionInfo($member_info) { function setSessionInfo($member_info = null) {
if(!$member_info->member_srl) return; $oMemberModel = &getModel('member');
// 사용자 정보가 넘어오지 않았다면 현재 세션 정보에서 사용자 정보를 추출
if(!$member_info && $_SESSION['member_srl'] && $oMemberModel->isLogged() ) {
$member_info = $oMemberModel->getMemberInfoByMemberSrl($_SESSION['member_srl']);
// 회원정보가 없다면 세션 파기
if($member_info->member_srl != $_SESSION['member_srl']) {
$this->destroySessionInfo();
return;
}
}
// 사용자의 전용 메뉴 구성 (이 메뉴는 애드온등으로 변경될 수 있음)
$member_info->menu_list['dispMemberInfo'] = 'cmd_view_member_info';
$member_info->menu_list['dispMemberFriend'] = 'cmd_view_friend';
$member_info->menu_list['dispMemberMessages'] = 'cmd_view_message_box';
$member_info->menu_list['dispMemberScrappedDocument'] = 'cmd_view_scrapped_document';
$member_info->menu_list['dispMemberSavedDocument'] = 'cmd_view_saved_document';
$member_info->menu_list['dispMemberOwnDocument'] = 'cmd_view_own_document';
// 오픈아이디인지 체크 (일단 아이디 형식으로만 결정) // 오픈아이디인지 체크 (일단 아이디 형식으로만 결정)
if(preg_match("/^([0-9a-z]+)$/is", $member_info->user_id)) $member_info->is_openid = false; if(preg_match("/^([0-9a-z]+)$/is", $member_info->user_id)) $member_info->is_openid = false;

View file

@ -84,7 +84,7 @@
</tr> </tr>
<tr> <tr>
<td class="red"><!--@if($val->is_admin != 'Y')--><a href="{getUrl('act','dispMemberAdminDeleteForm','member_srl', $val->member_srl)}">{$lang->cmd_delete}</a><!--@else--><img src="./images/icon_management.gif" title="{$lang->is_admin}" alt="{$lang->is_admin}" /><!--@end--></td> <td class="red"><!--@if($val->is_admin != 'Y')--><a href="{getUrl('act','dispMemberAdminDeleteForm','member_srl', $val->member_srl)}">{$lang->cmd_delete}</a><!--@else--><img src="./images/icon_management.gif" title="{$lang->is_admin}" alt="{$lang->is_admin}" /><!--@end--></td>
<td colspan="2">{$val->group_list}</td> <td colspan="2">{$val->group_list}&nbsp;</td>
<td> <td>
<!--@if($val->homepage)--><a href="{$val->homepage}" class="homepage" onclick="window.open(this.href);return false;"><img src="./images/icon_homepage.gif" title="{$lang->homepage}" alt="{$lang->homepage}" /></a> <!--@end--> <!--@if($val->homepage)--><a href="{$val->homepage}" class="homepage" onclick="window.open(this.href);return false;"><img src="./images/icon_homepage.gif" title="{$lang->homepage}" alt="{$lang->homepage}" /></a> <!--@end-->
<!--@if($val->blog)--><a href="{$val->blog}" class="blog" onclick="window.open(this.href);return false;"><img src="./images/icon_blog.gif" title="{$lang->blog}" alt="{$lang->blog}" /></a> <!--@end-->&nbsp; <!--@if($val->blog)--><a href="{$val->blog}" class="blog" onclick="window.open(this.href);return false;"><img src="./images/icon_blog.gif" title="{$lang->blog}" alt="{$lang->blog}" /></a> <!--@end-->&nbsp;

View file

@ -422,13 +422,6 @@
$new_group_args->member_srl = $member_srl; $new_group_args->member_srl = $member_srl;
$new_group_args->group_srl = $current_group_srl; $new_group_args->group_srl = $current_group_srl;
$new_group_output = executeQuery('member.addMemberToGroup', $new_group_args); $new_group_output = executeQuery('member.addMemberToGroup', $new_group_args);
// 만약 대상 사용자와 로그인 사용자의 정보가 동일하다면 세션을 변경해줌
$logged_info = Context::get('logged_info');
if($logged_info->member_srl == $member_srl) {
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
$_SESSION['logged_info']->group_list = $member_info->group_list;
}
} }
} }