자동 로그인 기능 추가. 로그인/로그아웃 후 이동할 url 지정 기능 추가

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@3698 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2008-02-18 17:08:36 +00:00
parent d0cf6957a5
commit 94ff9c8920
27 changed files with 271 additions and 86 deletions

View file

@ -106,10 +106,20 @@
$this->_setUploadedArgument();
// 인증관련 데이터를 Context에 설정
$oMember = getModel('member');
if($oMember->isLogged()) {
$oMemberModel = &getModel('member');
// 로그인되어 있지 않고 자동로그인 키값이 있으면 자동 로그인 체크
if(!$oMemberModel->isLogged() && $_COOKIE['xeak']) {
$oMemberController = &getController('member');
$oMemberController->doAutologin();
}
// 로그인되어 있으면 로그인 정보 기록
if($oMemberModel->isLogged()) {
$this->_set('is_logged', true);
$this->_set('logged_info', $_SESSION['logged_info']);
// 로그인 되어 있지 않으면 먼저 자동 로그인을 체크 비로그인 상태 기록
} else {
$this->_set('is_logged', false);
$this->_set('logged_info', NULL);

View file

@ -44,6 +44,11 @@ function xml_response_filter(oXml, callback_func, response_tags, callback_func_a
return null;
}
if(ret_obj["redirect_url"]) {
location.href=ret_obj["redirect_url"];
return null;
}
if(!callback_func) return null;
callback_func(ret_obj, response_tags, callback_func_arg, fo_obj);

View file

@ -116,7 +116,7 @@
<div class="signature">{$oDocument->getSignature()}</div>
<!--@end-->
<div class="clear"></div>
</div>
</xmp>
<!--@end-->
</div>
</div>

View file

@ -625,8 +625,10 @@
$member_config = $oModuleModel->getModuleConfig('member');
$GLOBALS['__member_signature_max_height'] = $member_config->signature_max_height;
}
$max_signature_height = $GLOBALS['__member_signature_max_height'];
if($max_signature_height) $signature = sprintf('<div style="height:%dpx;overflow-y:auto;overflow-x:hidden;">%s</div>',$max_signature_height, $signature);
if($signature) {
$max_signature_height = $GLOBALS['__member_signature_max_height'];
if($max_signature_height) $signature = sprintf('<div style="height:%dpx;overflow-y:auto;overflow-x:hidden;">%s</div>',$max_signature_height, $signature);
}
return $signature;
}

View file

@ -11,6 +11,7 @@
$lang->default_group_1 = "Associate Member";
$lang->default_group_2 = "Regular Member";
$lang->admin_group = "Managing Group";
$lang->keep_signed = 'Keep me signed in';
$lang->remember_user_id = 'Save ID';
$lang->already_logged = "You're already logged on";
$lang->denied_user_id = 'Entered ID is prohibited.';
@ -45,6 +46,8 @@
$lang->enable_join = 'Allow Member Join';
$lang->limit_day = 'Temporary Limit Date';
$lang->limit_date = 'Limit Date';
$lang->after_login_url = '로그인 후 이동할 URL';
$lang->after_logout_url = '로그아웃 후 이동할 URL';
$lang->redirect_url = 'URL after Join';
$lang->agreement = 'Member Join Agreement';
$lang->accept_agreement = 'Agree';
@ -59,6 +62,7 @@
$lang->webmaster_name = "Webmaster's Name";
$lang->webmaster_email = "Webmaster's Email";
$lang->about_keep_signed = '브라우저를 닫더라도 로그인이 게속 유지될 수 있습니다.\n\n로그인 유지시 사용시 다음 접속부터는 로그인을 하실필요가 없습니다.\n\n단, 게임방, 학교등 공공장소에서 이용시 개인정보가 유출될수 있으니 꼭 로그아웃을 해주세요';
$lang->about_webmaster_name = "Please input webmaster's name which will be used for authentication mails or other site administration. (default : webmaster)";
$lang->about_webmaster_email = "Please input webmaster's email address.";
@ -181,6 +185,8 @@
$lang->about_enable_join = 'Allow users to sign up';
$lang->about_limit_day = 'You can limit certification date after sign up';
$lang->about_limit_date = 'User cannot login until assigned date';
$lang->about_after_login_url = '로그인 후 이동할 URL을 정하실 수 있습니다. 비어 있으면 해당 페이지가 유지됩니다.';
$lang->about_after_logout_url = '로그아웃 후 이동할 URL을 정하실 수 있습니다. 비어 있으면 해당 페이지가 유지됩니다.';
$lang->about_redirect_url = 'Please input URL where users will go after sign up. When this is empty, it will be set as the previous page of sign up page.';
$lang->about_agreement = "Sign up agreement will only be displayed when it's not empty";

View file

@ -11,6 +11,7 @@
$lang->default_group_1 = "Usuario registrado";
$lang->default_group_2 = "Usuario regular";
$lang->admin_group = "Manejo del grupo";
$lang->keep_signed = 'Keep me signed in';
$lang->remember_user_id = 'Guardar ID';
$lang->already_logged = "Ya está conectado";
$lang->denied_user_id = 'Este ID está prohibido.';
@ -45,6 +46,8 @@
$lang->enable_join = 'Permitir el registro del usuario';
$lang->limit_day = 'Límite de la fecha temporal';
$lang->limit_date = 'Límite de fecha';
$lang->after_login_url = '로그인 후 이동할 URL';
$lang->after_logout_url = '로그아웃 후 이동할 URL';
$lang->redirect_url = 'URL luego del registro';
$lang->agreement = 'Acuerdo del registro del usuario';
$lang->accept_agreement = 'Acepto';
@ -59,6 +62,7 @@
$lang->webmaster_name = 'Nombre del Webmaster';
$lang->webmaster_email = 'Correo electrónico Webmaster';
$lang->about_keep_signed = '브라우저를 닫더라도 로그인이 게속 유지될 수 있습니다.\n\n로그인 유지시 사용시 다음 접속부터는 로그인을 하실필요가 없습니다.\n\n단, 게임방, 학교등 공공장소에서 이용시 개인정보가 유출될수 있으니 꼭 로그아웃을 해주세요';
$lang->about_webmaster_name = 'Por favor, webmaster de entrada el nombre que se utilizará para la autenticación de los correos u otros sitio de la administración. (Por defecto: webmaster)';
$lang->about_webmaster_email = 'Introduzca la dirección de correo electrónico webmaster.';
@ -179,6 +183,8 @@
$lang->about_enable_join = 'Debe seleccionar esta opción para permitir el registro de los usuarios';
$lang->about_limit_day = 'Usted puede limitar la fecha de la certificación luego de registrar';
$lang->about_limit_date = 'Usuario no podra conectarse hasta la fecha indicada';
$lang->about_after_login_url = '로그인 후 이동할 URL을 정하실 수 있습니다. 비어 있으면 해당 페이지가 유지됩니다.';
$lang->about_after_logout_url = '로그아웃 후 이동할 URL을 정하실 수 있습니다. 비어 있으면 해당 페이지가 유지됩니다.';
$lang->about_redirect_url = 'Ingresar la URL que va a abrir luego de registrar los usuarios. Cuando esto esta vacío, se habrirá la página anterior a la del registro.';
$lang->about_agreement = "Acuerdo del registro no será mostrado si esta vacío";

View file

@ -11,6 +11,7 @@
$lang->default_group_1 = "準会員";
$lang->default_group_2 = "正会員";
$lang->admin_group = "管理グループ";
$lang->keep_signed = '로그인 유지';
$lang->remember_user_id = 'ID保存';
$lang->already_logged = '既にログインされています。';
$lang->denied_user_id = '使用が禁じられているIDです。';
@ -46,6 +47,8 @@
$lang->enable_join = '会員加入を許可する';
$lang->limit_day = '臨時制限日';
$lang->limit_date = '制限日';
$lang->after_login_url = '로그인 후 이동할 URL';
$lang->after_logout_url = '로그아웃 후 이동할 URL';
$lang->redirect_url = '加入後移動ページ';
$lang->agreement = '会員加入規約';
$lang->accept_agreement = '規約に同意する';
@ -60,6 +63,7 @@
$lang->webmaster_name = 'ウェブマスターの名前';
$lang->webmaster_email = 'ウェブマスターのメール';
$lang->about_keep_signed = '브라우저를 닫더라도 로그인이 게속 유지될 수 있습니다.\n\n로그인 유지시 사용시 다음 접속부터는 로그인을 하실필요가 없습니다.\n\n단, 게임방, 학교등 공공장소에서 이용시 개인정보가 유출될수 있으니 꼭 로그아웃을 해주세요';
$lang->about_webmaster_name = '認証メールまたはサイト管理時に使用されるウェブマスターの名前を入力してください(デフォルト : webmaster';
$lang->about_webmaster_email = 'ウェブマスターのメールアドレスを入力してください。';
@ -182,6 +186,8 @@
$lang->about_enable_join = 'チェックを入れないとユーザが会員に加入できません。';
$lang->about_limit_day = '会員加入後一定の期間中、認証制限を行うことができます。';
$lang->about_limit_date = '指定された期間まで該当ユーザはログインできなくします。';
$lang->about_after_login_url = '로그인 후 이동할 URL을 정하실 수 있습니다. 비어 있으면 해당 페이지가 유지됩니다.';
$lang->about_after_logout_url = '로그아웃 후 이동할 URL을 정하실 수 있습니다. 비어 있으면 해당 페이지가 유지됩니다.';
$lang->about_redirect_url = '会員加入後、移動するURLを入力してください。空の場合は会員加入する前のページに戻ります。';
$lang->about_agreement = '会員加入規約がない場合は表示されません。';

View file

@ -8,9 +8,10 @@
$lang->member = '회원';
$lang->member_default_info = '기본 정보';
$lang->member_extend_info = '추가 정보';
$lang->default_group_1 = "준회원";
$lang->default_group_2 = "정회원";
$lang->admin_group = "관리그룹";
$lang->default_group_1 = '준회원';
$lang->default_group_2 = '정회원';
$lang->admin_group = '관리그룹';
$lang->keep_signed = '로그인 유지';
$lang->remember_user_id = '아이디 저장';
$lang->already_logged = '이미 로그인되어 있습니다';
$lang->denied_user_id = '사용금지된 아이디입니다';
@ -46,6 +47,8 @@
$lang->enable_join = '회원 가입 허가';
$lang->limit_day = '임시 제한 일자';
$lang->limit_date = '제한일';
$lang->after_login_url = '로그인 후 이동할 URL';
$lang->after_logout_url = '로그아웃 후 이동할 URL';
$lang->redirect_url = '회원 가입후 이동할 페이지';
$lang->agreement = '회원 가입 약관';
$lang->accept_agreement = '약관동의';
@ -60,6 +63,7 @@
$lang->webmaster_name = '웹마스터 이름';
$lang->webmaster_email = '웹마스터 메일주소';
$lang->about_keep_signed = '브라우저를 닫더라도 로그인이 게속 유지될 수 있습니다.\n\n로그인 유지시 사용시 다음 접속부터는 로그인을 하실필요가 없습니다.\n\n단, 게임방, 학교등 공공장소에서 이용시 개인정보가 유출될수 있으니 꼭 로그아웃을 해주세요';
$lang->about_webmaster_name = '인증 메일이나 기타 사이트 관리시 사용될 웹마스터의 이름을 입력해주세요. (기본 : webmaster)';
$lang->about_webmaster_email = '웹마스터의 메일 주소를 입력해주세요.';
@ -182,6 +186,8 @@
$lang->about_enable_join = '체크를 하셔야 사용자들이 회원가입을 할 수 있습니다';
$lang->about_limit_day = '회원 가입후 정해진 일자동안 인증 제한을 할 수 있습니다';
$lang->about_limit_date = '지정된 일자까지 해당 사용자는 로그인을 할 수 없습니다';
$lang->about_after_login_url = '로그인 후 이동할 URL을 정하실 수 있습니다. 비어 있으면 해당 페이지가 유지됩니다.';
$lang->about_after_logout_url = '로그아웃 후 이동할 URL을 정하실 수 있습니다. 비어 있으면 해당 페이지가 유지됩니다.';
$lang->about_redirect_url = '회원 가입후 이동할 url을 입력해 주세요. 비어 있으면 가입 이전 페이지로 돌아갑니다';
$lang->about_agreement = '회원가입약관이 없을 경우 표시되지 않습니다';

View file

@ -11,6 +11,7 @@
$lang->default_group_1 = "Общая группа";
$lang->default_group_2 = "Особая группа";
$lang->admin_group = "Администативная группа";
$lang->keep_signed = '로그인 유지';
$lang->remember_user_id = 'Сохранить ID';
$lang->already_logged = "Вы уже вошли";
$lang->denied_user_id = 'Извините. Этот ID запрещен.';
@ -45,6 +46,8 @@
$lang->enable_join = 'Позволить пользователям регистрироваться';
$lang->limit_day = 'Временный лимит даты';
$lang->limit_date = 'Дата лимита';
$lang->after_login_url = '로그인 후 이동할 URL';
$lang->after_logout_url = '로그아웃 후 이동할 URL';
$lang->redirect_url = 'URL после регистрации';
$lang->agreement = 'Пользовательское соглашение о регистрации';
$lang->accept_agreement = 'Согласен';
@ -59,6 +62,7 @@
$lang->webmaster_name = "Имя веб-мастера";
$lang->webmaster_email = "Email веб-мастера";
$lang->about_keep_signed = '브라우저를 닫더라도 로그인이 게속 유지될 수 있습니다.\n\n로그인 유지시 사용시 다음 접속부터는 로그인을 하실필요가 없습니다.\n\n단, 게임방, 학교등 공공장소에서 이용시 개인정보가 유출될수 있으니 꼭 로그아웃을 해주세요';
$lang->about_webmaster_name = "Пожалуйста, введите имя веб-мастера, которое будет использоваться для аутентификационных писем или другого адиминистрирования сайта. (по умолчанию : webmaster)";
$lang->about_webmaster_email = "Пожалуйста, введите email адрес веб-мастера.";
@ -180,6 +184,8 @@
$lang->about_enable_join = 'Позволить пользователям регистрироваться';
$lang->about_limit_day = 'Вы можете ограничить дату сертификации после регистрации';
$lang->about_limit_date = 'Пользователь не может войти до указанной даты';
$lang->about_after_login_url = '로그인 후 이동할 URL을 정하실 수 있습니다. 비어 있으면 해당 페이지가 유지됩니다.';
$lang->about_after_logout_url = '로그아웃 후 이동할 URL을 정하실 수 있습니다. 비어 있으면 해당 페이지가 유지됩니다.';
$lang->about_redirect_url = 'Пожалуйста, введите URL, куда пользователи попадут после регистрации. Когда поле пустое, будет установлена страница предшествуящая странице регистрации.';
$lang->about_agreement = "Регистрационное соглашение будет показано, если оно содержит текст";

View file

@ -11,6 +11,7 @@
$lang->default_group_1 = "准会员";
$lang->default_group_2 = "正会员";
$lang->admin_group = "管理组";
$lang->keep_signed = '로그인 유지';
$lang->remember_user_id = '保存ID';
$lang->already_logged = '您已经登录!';
$lang->denied_user_id = '被禁止的用户名。';
@ -45,6 +46,8 @@
$lang->enable_join = '允许会员注册';
$lang->limit_day = '认证限制';
$lang->limit_date = '限制日期';
$lang->after_login_url = '로그인 후 이동할 URL';
$lang->after_logout_url = '로그아웃 후 이동할 URL';
$lang->redirect_url = '注册会员后页面转向';
$lang->agreement = '会员注册条款';
$lang->accept_agreement = '同意条款';
@ -59,6 +62,7 @@
$lang->webmaster_name = '管理员名';
$lang->webmaster_email = '管理员电子邮件';
$lang->about_keep_signed = '브라우저를 닫더라도 로그인이 게속 유지될 수 있습니다.\n\n로그인 유지시 사용시 다음 접속부터는 로그인을 하실필요가 없습니다.\n\n단, 게임방, 학교등 공공장소에서 이용시 개인정보가 유출될수 있으니 꼭 로그아웃을 해주세요';
$lang->about_webmaster_name = '请输入认证所需的电子邮件地址或管理其他网站时要使用的网站管理员名称。(默认 : webmaster)';
$lang->about_webmaster_email = '请输入网站管理员的电子邮件地址。';
@ -179,6 +183,8 @@
$lang->about_enable_join = '选择此项后用户才可以注册。';
$lang->about_limit_day = '注册会员后的认证有效期限。';
$lang->about_limit_date = '直到指定日期该用户不能登录。';
$lang->about_after_login_url = '로그인 후 이동할 URL을 정하실 수 있습니다. 비어 있으면 해당 페이지가 유지됩니다.';
$lang->about_after_logout_url = '로그아웃 후 이동할 URL을 정하실 수 있습니다. 비어 있으면 해당 페이지가 유지됩니다.';
$lang->about_redirect_url = '请输入注册会员后的页面转向 url。(留空为返回前页)';
$lang->about_agreement = '没有会员条款时不显示。';

View file

@ -83,7 +83,7 @@
**/
function procMemberAdminInsertConfig() {
// 기본 정보를 받음
$args = Context::gets('webmaster_name','webmaster_email','skin','colorset','enable_openid','enable_join','limit_day','redirect_url','agreement','profile_image','profile_image_max_width','profile_image_max_height','image_name','image_mark', 'image_name_max_width', 'image_name_max_height','image_mark_max_width','image_mark_max_height','signature_max_height');
$args = Context::gets('webmaster_name','webmaster_email','skin','colorset','enable_openid','enable_join','limit_day','after_login_url','after_logout_url','redirect_url','agreement','profile_image','profile_image_max_width','profile_image_max_height','image_name','image_mark', 'image_name_max_width', 'image_name_max_height','image_mark_max_width','image_mark_max_height','signature_max_height');
if(!$args->skin) $args->skin = "default";
if(!$args->colorset) $args->colorset = "white";
if($args->enable_join!='Y') $args->enable_join = 'N';

View file

@ -51,50 +51,61 @@
$oModuleController->insertActionForward('member', 'controller', 'procMemberDeleteImageName');
$oModuleController->insertActionForward('member', 'controller', 'procMemberDeleteImageMark');
$oModuleModel = &getModel('module');
$args = $oModuleModel->getModuleConfig('member');
// 기본 정보를 세팅
$args->enable_join = 'Y';
$args->enable_openid = 'N';
$args->image_name = 'Y';
$args->image_mark = 'Y';
$args->profile_image = 'Y';
$args->image_name_max_width = '90';
$args->image_name_max_height = '20';
$args->image_mark_max_width = '20';
$args->image_mark_max_height = '20';
$args->profile_image_max_width = '80';
$args->profile_image_max_height = '80';
if(!$args->enable_openid) $args->enable_openid = 'N';
if(!$args->image_name) $args->image_name = 'Y';
if(!$args->image_mark) $args->image_mark = 'Y';
if(!$args->profile_image) $args->profile_image = 'Y';
if(!$args->image_name_max_width) $args->image_name_max_width = '90';
if(!$args->image_name_max_height) $args->image_name_max_height = '20';
if(!$args->image_mark_max_width) $args->image_mark_max_width = '20';
if(!$args->image_mark_max_height) $args->image_mark_max_height = '20';
if(!$args->profile_image_max_width) $args->profile_image_max_width = '80';
if(!$args->profile_image_max_height) $args->profile_image_max_height = '80';
$oModuleController->insertModuleConfig('member',$args);
// 멤버 컨트롤러 객체 생성
$oMemberModel = &getModel('member');
$oMemberController = &getController('member');
$oMemberAdminController = &getAdminController('member');
// 관리자, 정회원, 준회원 그룹을 입력
$group_args->title = Context::getLang('admin_group');
$group_args->is_default = 'N';
$group_args->is_admin = 'Y';
$output = $oMemberAdminController->insertGroup($group_args);
$groups = $oMemberModel->getGroups();
if(!count($groups)) {
// 관리자, 정회원, 준회원 그룹을 입력
$group_args->title = Context::getLang('admin_group');
$group_args->is_default = 'N';
$group_args->is_admin = 'Y';
$output = $oMemberAdminController->insertGroup($group_args);
unset($group_args);
$group_args->title = Context::getLang('default_group_1');
$group_args->is_default = 'Y';
$group_args->is_admin = 'N';
$output = $oMemberAdminController->insertGroup($group_args);
unset($group_args);
$group_args->title = Context::getLang('default_group_1');
$group_args->is_default = 'Y';
$group_args->is_admin = 'N';
$output = $oMemberAdminController->insertGroup($group_args);
unset($group_args);
$group_args->title = Context::getLang('default_group_2');
$group_args->is_default = 'N';
$group_args->is_admin = 'N';
$oMemberAdminController->insertGroup($group_args);
unset($group_args);
$group_args->title = Context::getLang('default_group_2');
$group_args->is_default = 'N';
$group_args->is_admin = 'N';
$oMemberAdminController->insertGroup($group_args);
}
// 관리자 정보 세팅
$admin_info = Context::gets('user_id','password','nick_name','user_name', 'email_address');
if($admin_info->user_id) {
// 관리자 정보 입력
$oMemberAdminController->insertAdmin($admin_info);
$admin_args->is_admin = 'Y';
$output = executeQuery('member.getMemberList', $admin_args);
if(!$output->data) {
$admin_info = Context::gets('user_id','password','nick_name','user_name', 'email_address');
if($admin_info->user_id) {
// 관리자 정보 입력
$oMemberAdminController->insertAdmin($admin_info);
// 로그인 처리시킴
$output = $oMemberController->doLogin($admin_info->user_id);
// 로그인 처리시킴
$output = $oMemberController->doLogin($admin_info->user_id);
}
}
// 금지 아이디 등록 (기본 + 모듈명)

View file

@ -16,7 +16,7 @@
/**
* @brief user_id, password를 체크하여 로그인 시킴
**/
function procMemberLogin($user_id = null, $password = null, $remember_user_id = null) {
function procMemberLogin($user_id = null, $password = null, $keep_signed = null) {
// 변수 정리
if(!$user_id) $user_id = Context::get('user_id');
$user_id = trim($user_id);
@ -24,14 +24,19 @@
if(!$password) $password = Context::get('password');
$password = trim($password);
if($remember_user_id) $remember_user_id = Context::get('remember_user_id');
if($remember_user_id != 'Y') setcookie('user_id','');
if(!$keep_signed) $keep_signed = Context::get('keep_signed');
// 아이디나 비밀번호가 없을때 오류 return
if(!$user_id) return new Object(-1,'null_user_id');
if(!$password) return new Object(-1,'null_password');
return $this->doLogin($user_id, $password);
$output = $this->doLogin($user_id, $password, $keep_signed=='Y'?true:false);
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('member');
if($config->after_login_url) $this->setRedirectUrl($config->after_login_url);
return $output;
}
/**
@ -137,8 +142,14 @@
// 로그아웃 이후 trigger 호출 (after)
$trigger_output = ModuleHandler::triggerCall('member.doLogout', 'after', $logged_info);
if(!$trigger_output->toBool()) return $trigger_output;
return new Object();
$output = new Object();
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('member');
if($config->after_logout_url) Context::set('redirect_url', $config->after_logout_url);
return $output;
}
/**
@ -1202,10 +1213,44 @@
return executeQuery('member.addMemberToGroup',$args);
}
/**
* @brief 자동 로그인 시킴
**/
function doAutologin() {
// 자동 로그인 키 값을 구함
$args->autologin_key = $_COOKIE['xeak'];
// 키값에 해당하는 정보 구함
$output = executeQuery('member.getAutologin', $args);
// 정보가 없으면 쿠키 삭제
if(!$output->toBool() || !$output->data) {
setCookie('xeak',null,time()+60*60*24*365, '/');
return;
}
$user_id = $output->data->user_id;
$password = $output->data->password;
if(!$user_id || !$password) {
setCookie('xeak',null,time()+60*60*24*365, '/');
return;
}
// 정보를 바탕으로 키값 비교
$key = md5($user_id.$password.$_SERVER['REMOTE_ADDR']);
if($key == $args->autologin_key) {
$output = $this->doLogin($user_id);
} else {
executeQuery('member.deleteAutologin', $args);
setCookie('xeak',null,time()+60*60*24*365, '/');
}
}
/**
* @brief 로그인 시킴
**/
function doLogin($user_id, $password = '') {
function doLogin($user_id, $password = '', $keep_signed = false) {
// 로그인 이전에 trigger 호출 (before)
$trigger_obj->user_id = $user_id;
$trigger_obj->password = $password;
@ -1241,6 +1286,18 @@
$trigger_output = ModuleHandler::triggerCall('member.doLogin', 'after', $member_info);
if(!$trigger_output->toBool()) return $trigger_output;
// 자동 로그인 사용시 정보 처리
if($keep_signed) {
// 자동 로그인 키 생성
$autologin_args->autologin_key = md5($user_id.$member_info->password.$_SERVER['REMOTE_ADDR']);
$autologin_args->member_srl = $member_info->member_srl;
executeQuery('member.deleteAutologin', $autologin_args);
$output = executeQuery('member.insertAutologin', $autologin_args);
if($output->toBool()) {
setCookie('xeak',$autologin_args->autologin_key, time()+60*60*24*365, '/');
}
}
$this->setSessionInfo($member_info);
return $output;
@ -1580,6 +1637,11 @@
$_SESSION[$key] = '';
}
session_destroy();
if($_COOKIE['xeak']) {
$args->autologin_key = $_COOKIE['xeak'];
executeQuery('member.deleteAutologin', $args);
}
}
}
?>

View file

@ -430,6 +430,7 @@
$image_name_file = sprintf('files/member_extra_info/profile_image/%s%d.%s', getNumberingPath($member_srl), $member_srl, $exts[$i]);
if(file_exists($image_name_file)) {
list($width, $height, $type, $attrs) = getimagesize($image_name_file);
$info = null;
$info->width = $width;
$info->height = $height;
$info->src = Context::getRequestUri().$image_name_file;

View file

@ -262,7 +262,11 @@
* @brief 로그아웃 출력
**/
function dispMemberLogout() {
// 템플릿 파일 지정
$oMemberController = &getController('member');
$oMemberController->procMemberLogout();
Context::set('layout','none');
$this->setTemplatePath($this->module_path.'/tpl');
$this->setTemplateFile('logout');
}

View file

@ -0,0 +1,8 @@
<query id="deleteAutologin" action="delete">
<tables>
<table name="member_autologin" />
</tables>
<conditions>
<condition operation="equal" column="autologin_key" var="autologin_key" notnull="notnull" />
</conditions>
</query>

View file

@ -0,0 +1,15 @@
<query id="getAutologin" action="select">
<tables>
<table name="member" alias="member"/>
<table name="member_autologin" alias="member_autologin" />
</tables>
<columns>
<column name="member.user_id" alias="user_id" />
<column name="member.password" alias="password" />
<column name="member_autologin.autologin_key" alias="autologin_key" />
</columns>
<conditions>
<condition operation="equal" column="member_autologin.autologin_key" var="autologin_key" notnull="notnull" />
<condition operation="equal" column="member.member_srl" var="member_autologin.member_srl" notnull="notnull" pipe="and" />
</conditions>
</query>

View file

@ -0,0 +1,9 @@
<query id="insertAutologin" action="insert">
<tables>
<table name="member_autologin" />
</tables>
<columns>
<column name="autologin_key" var="autologin_key" notnull="notnull" minlength="1" maxlength="60" />
<column name="member_srl" var="member_srl" filter="number" notnull="notnull" />
</columns>
</query>

View file

@ -0,0 +1,4 @@
<table name="member_autologin">
<column name="autologin_key" type="varchar" size="80" notnull="notnull" primary_key="primary_key" />
<column name="member_srl" type="number" size="11" notnull="notnull" primary_key="primary_key" />
</table>

View file

@ -74,13 +74,12 @@ function doUploadImageMark() {
/* 로그인 영역에 포커스 */
function doFocusUserId(fo_id) {
if(xScrollTop()) return;
var fo_obj = xGetElementById(fo_id);
if(xGetCookie('user_id')) {
fo_obj.user_id.value = xGetCookie('user_id');
fo_obj.remember_user_id.checked = true;
fo_obj.password.focus();
} else {
fo_obj.user_id.focus();
if(fo_obj.user_id) {
try{
fo_obj.user_id.focus();
} catch(e) {};
}
}

View file

@ -2,6 +2,11 @@
<!--%import("filter/login.xml")-->
<!--%import("filter/openid_login.xml")-->
<script type="text/javascript">
var keep_signed_msg = "{$lang->about_keep_signed}";
xAddEventListener(window, "load", function() { doFocusUserId('fo_member_login'); });
</script>
<!-- 제로보드XE 로그인 폼 -->
<div class="memberSmallBox w400">
@ -21,8 +26,8 @@
<span class="button"><input type="submit" value="{$lang->cmd_login}" /></span>
<p class="keep">
<input type="checkbox" name="remember_user_id" id="keepid" value="Y" />
<label for="keepid">{$lang->remember_user_id}</label>
<input type="checkbox" name="keep_signed" id="keepid" value="Y" onclick="return confirm(keep_signed_msg);"/>
<label for="keepid">{$lang->keep_signed}</label>
</p>
</fieldset>
</form>
@ -57,8 +62,4 @@
</div>
<!--@end-->
<script type="text/javascript">
xAddEventListener(window, "load", function() { doFocusUserId('fo_member_login'); });
</script>
<!--#include("./common_footer.html")-->

View file

@ -0,0 +1,7 @@
<script type="text/javascript">
<!--@if($redirect_url)-->
location.href = "{$redirect_url}";
<!--@else-->
location.href = current_url.setQuery('act','');
<!--@end-->
</script>

View file

@ -84,10 +84,24 @@
<p>{$lang->about_signature_max_height}</p>
</td>
</tr>
<tr>
<th scope="row">{$lang->after_login_url}</th>
<td>
<input type="text" name="after_login_url" value="{$config->after_login_url}" class="inputTypeText w400" />
<p>{$lang->about_after_login_url}</p>
</td>
</tr>
<tr>
<th scope="row">{$lang->after_logout_url}</th>
<td>
<input type="text" name="after_logout_url" value="{$config->after_logout_url}" class="inputTypeText w400" />
<p>{$lang->about_after_logout_url}</p>
</td>
</tr>
<tr>
<th scope="row">{$lang->redirect_url}</th>
<td>
<input type="text" name="redirect_url" value="{$config->redirect_url}" class="inputTypeText w100" />
<input type="text" name="redirect_url" value="{$config->redirect_url}" class="inputTypeText w400" />
<p>{$lang->about_redirect_url}</p>
</td>
</tr>

View file

@ -1,13 +1,8 @@
/* 로그인 영역에 포커스 */
function doFocusUserId(fo_id) {
if(xScrollTop()) return;
var fo_obj = xGetElementById(fo_id);
if(xGetCookie('user_id')) {
fo_obj.user_id.value = xGetCookie('user_id');
fo_obj.remember_user_id.checked = true;
try{
fo_obj.password.focus();
} catch(e) {};
} else {
if(fo_obj.user_id) {
try{
fo_obj.user_id.focus();
} catch(e) {};

View file

@ -7,6 +7,11 @@
<!--%import("./filter/openid_login.xml")-->
<!--%import("./js/login.js")-->
<script type="text/javascript">
var keep_signed_msg = "{$lang->about_keep_signed}";
xAddEventListener(window, "load", function(){ doFocusUserId("fo_login_widget"); });
</script>
<div class="box_login fc_01" id="box_login">
<form action="./" method="get" onsubmit="return procFilter(this, widget_login)" id="fo_login_widget">
<div class="form_field">
@ -20,8 +25,8 @@
<div><input type="submit" value=" " class="submit" /></div>
<ul class="option">
<li><input type="checkbox" name="remember_user_id" id="chk_remember_user_id" value="Y" class="checkbox" /></li>
<li><label for="chk_remember_user_id">{$lang->remember_user_id}</label></li>
<li><input type="checkbox" name="keep_signed" id="keepid" value="Y" onclick="return confirm(keep_signed_msg);"/></li>
<li><label for="keepid">{$lang->keep_signed}</label></li>
</ul>
<ul class="extra_option">
<li><a href="{getUrl('act','dispMemberSignUpForm')}" class="fc_02 btn">{$lang->cmd_signup}</a></li>
@ -29,10 +34,6 @@
</ul>
</form>
<div class="clear"></div>
<script type="text/javascript">
xAddEventListener(window, "load", function(){ doFocusUserId("fo_login_widget"); });
</script>
</div>
<!-- OpenID -->

View file

@ -1,17 +1,12 @@
/* 로그인 영역에 포커스 */
function doFocusUserId(fo_id) {
if(xScrollTop()) return;
var fo_obj = xGetElementById(fo_id);
if(xGetCookie('user_id')) {
fo_obj.user_id.value = xGetCookie('user_id');
fo_obj.remember_user_id.checked = true;
if(fo_obj.user_id) {
try{
fo_obj.user_id.focus();
} catch(e) {};
}
try {
if(xScrollTop()) return;
if(fo_obj.user_id.value) fo_obj.password.focus();
else fo_obj.user_id.focus();
} catch(e) { }
}
/* 로그인 후 */

View file

@ -11,6 +11,11 @@
<!--%import("./filter/openid_login.xml")-->
<!--%import("./js/login.js")-->
<script type="text/javascript">
var keep_signed_msg = "{$lang->about_keep_signed}";
xAddEventListener(window, "load", function(){ doFocusUserId("fo_login_widget"); });
</script>
<fieldset id="login" class="login_{$colorset}">
<legend>{$lang->cmd_login}</legend>
<form action="./" method="get" onsubmit="return procFilter(this, widget_login)" id="fo_login_widget">
@ -23,8 +28,9 @@
<input type="image" src="./images/{$colorset}/buttonLogin.gif" alt="login" class="login" />
</div>
<p class="save">
<input name="remember_user_id" id="chk_remember_user_id" type="checkbox" value="Y" />
<label for="chk_remember_user_id">{$lang->remember_user_id}</label>
<input type="checkbox" name="keep_signed" id="keepid" value="Y" onclick="return confirm(keep_signed_msg);"/>
<label for="keepid">{$lang->keep_signed}</label>
<!--@if($member_config->enable_openid=='Y')-->
<input name="use_open_id" id="use_open_id" type="checkbox" value="Y" onclick="toggleLoginForm(this); return false;"/>