From 471fa1d2b0689dca96d4c16466785a6c2fe5faa6 Mon Sep 17 00:00:00 2001 From: rubyeye Date: Tue, 22 Apr 2008 13:26:16 +0000 Subject: [PATCH] =?UTF-8?q?#444=20=ED=9A=8C=EC=9B=90=20=EA=B0=80=EC=9E=85?= =?UTF-8?q?=EC=8B=9C=20=EB=A9=94=EC=9D=BC=20=EC=9D=B8=EC=A6=9D=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80.=20=ED=8A=B9=EC=A0=95=20?= =?UTF-8?q?=EB=B3=80=EC=88=98=EB=AA=85=20=EB=B3=80=EA=B2=BD=20sended->sent?= =?UTF-8?q?.=20=EA=B8=B4=20=EB=A9=94=EC=8B=9C=EC=A7=80=EC=97=90=20?= =?UTF-8?q?=EA=B0=9C=ED=96=89=EB=AC=B8=EC=9E=90=20=EC=B6=94=EA=B0=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@4131 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/member/lang/ko.lang.php | 12 ++- modules/member/member.admin.controller.php | 2 +- modules/member/member.class.php | 1 + modules/member/member.controller.php | 88 +++++++++++++++++-- modules/member/queries/chkAuthMail.xml | 11 +++ modules/member/queries/insertAuthMail.xml | 1 + .../member/queries/updateMemberPassword.xml | 1 + modules/member/schemas/member_auth_mail.xml | 1 + .../tpl/confirm_member_account_mail.html | 12 +++ modules/member/tpl/member_config.html | 7 ++ modules/member/tpl/msg_success_authed.html | 4 + 11 files changed, 129 insertions(+), 11 deletions(-) create mode 100644 modules/member/queries/chkAuthMail.xml create mode 100644 modules/member/tpl/confirm_member_account_mail.html diff --git a/modules/member/lang/ko.lang.php b/modules/member/lang/ko.lang.php index 03aca5dd8..02e3a59b0 100644 --- a/modules/member/lang/ko.lang.php +++ b/modules/member/lang/ko.lang.php @@ -45,6 +45,7 @@ $lang->signature_max_height = '서명 높이 제한'; $lang->enable_openid = 'OpenID 지원'; $lang->enable_join = '회원 가입 허가'; + $lang->enable_confirm = '메일 인증 사용'; $lang->enable_ssl = 'SSL 기능 사용'; $lang->security_sign_in = '보안로그인 사용'; $lang->limit_day = '임시 제한 일자'; @@ -125,9 +126,14 @@ $lang->msg_find_account_title = '아이디/ 비밀번호 정보입니다'; $lang->msg_find_account_info = '요청하신 계정 정보는 아래와 같습니다'; $lang->msg_find_account_comment = '아래 링크를 클릭하시면 위에 적힌 비밀번호로 바뀌게 됩니다.
로그인 하신 후 비밀번호를 바꾸어주세요.'; - $lang->msg_auth_mail_sended = '%s 메일로 인증 정보를 담은 메일이 발송되었습니다. 메일을 확인하세요.'; + $lang->msg_confirm_account_title = '가입 인증 메일 입니다'; + $lang->msg_confirm_account_info = '가입하신 계정 정보는 아래와 같습니다'; + $lang->msg_confirm_account_comment = '아래 링크를 클릭하시면 가입 인증이 이루어집니다.'; + $lang->msg_auth_mail_sent = '%s 메일로 인증 정보를 담은 메일이 발송되었습니다. 메일을 확인하세요.'; + $lang->msg_confirm_mail_sent = '%s 메일로 가입 인증 메일이 발송되었습니다. 메일을 확인하세요.'; $lang->msg_invalid_auth_key = '잘못된 계정 인증 요청입니다.
아이디/비밀번호 찾기를 다시 하시거나 사이트 관리자에게 계정 정보를 문의해주세요'; - $lang->msg_success_authed = '인증이 정상적으로 되어 로그인 처리가 되었습니다. 꼭 인증 메일에 표시된 비밀번호를 이용하여 원하시는 비밀번호로 변경하세요.'; + $lang->msg_success_authed = '인증이 정상적으로 되어 로그인 처리가 되었습니다.\n꼭 인증 메일에 표시된 비밀번호를 이용하여 원하시는 비밀번호로 변경하세요.'; + $lang->msg_success_confirmed = '가입 인증이 정상적으로 처리 되었습니다.'; $lang->msg_no_message = '쪽지가 없습니다'; $lang->message_received = '쪽지가 왔습니다'; @@ -159,6 +165,7 @@ $lang->msg_accept_agreement = '약관에 동의하셔야 합니다'; $lang->msg_user_denied = '입력하신 아이디의 사용이 중지되셨습니다'; + $lang->msg_user_not_confirmed = '아직 메일 인증이 이루어지지 않았습니다. 메일을 확인해 주세요'; $lang->msg_user_limited = '입력하신 아이디는 %s 이후부터 사용하실 수 있습니다'; $lang->about_user_id = '사용자 ID는 3~20자 사이의 영문+숫자로 이루어져야 하며 영문으로 시작되어야 합니다'; @@ -186,6 +193,7 @@ $lang->about_enable_openid = 'OpenID 지원을 할 경우 체크하시면 됩니다'; $lang->about_enable_join = '체크를 하셔야 사용자들이 회원가입을 할 수 있습니다'; + $lang->about_enable_confirm = '입력된 메일 주소로 인증 메일을 보내 회원 가입을 확인 합니다'; $lang->about_enable_ssl = '서버에서 SSL지원이 될 경우 회원가입/정보수정/로그인등의 개인정보가 서버로 보내질때 SSL(https)를 이용하도록 할 수 있습니다'; $lang->about_limit_day = '회원 가입후 정해진 일자동안 인증 제한을 할 수 있습니다'; $lang->about_limit_date = '지정된 일자까지 해당 사용자는 로그인을 할 수 없습니다'; diff --git a/modules/member/member.admin.controller.php b/modules/member/member.admin.controller.php index c41b547ab..1920e245c 100644 --- a/modules/member/member.admin.controller.php +++ b/modules/member/member.admin.controller.php @@ -83,7 +83,7 @@ **/ function procMemberAdminInsertConfig() { // 기본 정보를 받음 - $args = Context::gets('webmaster_name','webmaster_email','skin','colorset','enable_openid','enable_join','enable_ssl','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','editor_skin'); + $args = Context::gets('webmaster_name','webmaster_email','skin','colorset','enable_openid','enable_join','enable_confirm','enable_ssl','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','editor_skin'); if(!$args->skin) $args->skin = "default"; if(!$args->colorset) $args->colorset = "white"; if($args->enable_join!='Y') $args->enable_join = 'N'; diff --git a/modules/member/member.class.php b/modules/member/member.class.php index dbf8f829f..53b1df893 100644 --- a/modules/member/member.class.php +++ b/modules/member/member.class.php @@ -81,6 +81,7 @@ // 기본 정보를 세팅 $args->enable_join = 'Y'; if(!$args->enable_openid) $args->enable_openid = 'N'; + if(!$args->enable_auth_mail) $args->enable_auth_mail = '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'; diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index c0415e1dd..c69a2782e 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -710,6 +710,9 @@ unset($all_args->accept_agreement); unset($all_args->signature); + // 메일 인증 기능 사용시 회원 상태를 denied로 설정 + if ($config->enable_confirm == 'Y') $args->denied = 'Y'; + // 모든 request argument에서 필수 정보만 제외 한 후 추가 데이터로 입력 $extra_vars = delObjectVars($all_args, $args); $args->extra_vars = serialize($extra_vars); @@ -719,11 +722,15 @@ if(!$output->toBool()) return $output; // 로그인 시킴 - $this->doLogin($args->user_id); + if ($config->enable_confirm != 'Y') $this->doLogin($args->user_id); $this->add('member_srl', $args->member_srl); if($config->redirect_url) $this->add('redirect_url', $config->redirect_url); - $this->setMessage('success_registed'); + if ($config->enable_confirm == 'Y') { + $msg = sprintf(Context::getLang('msg_confirm_mail_sent'), $args->email_address); + $this->setMessage($msg); + } + else $this->setMessage('success_registed'); } /** @@ -1101,11 +1108,19 @@ // 회원의 정보를 가져옴 $member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl); + // 아이디/비밀번호 찾기가 가능한 상태의 회원인지 검사 + if ($member_info->denied == 'Y') { + $chk_args->member_srl = $member_info->member_srl; + $output = executeQuery('member.chkAuthMail', $chk_args); + if ($output->toBool() && $output->data->count != '0') return new Object(-1, 'msg_user_not_confirmed'); + } + // 인증 DB에 데이터를 넣음 $args->user_id = $member_info->user_id; $args->member_srl = $member_info->member_srl; $args->new_password = rand(111111,999999); $args->auth_key = md5( rand(0,999999 ) ); + $args->is_register = 'N'; $output = executeQuery('member.insertAuthMail', $args); if(!$output->toBool()) return $output; @@ -1129,7 +1144,7 @@ $oMail->send(); // 메세지 return - $msg = sprintf(Context::getLang('msg_auth_mail_sended'), $member_info->email_address); + $msg = sprintf(Context::getLang('msg_auth_mail_sent'), $member_info->email_address); $this->setMessage($msg); } @@ -1150,7 +1165,18 @@ if(!$output->toBool() || $output->data->auth_key != $auth_key) return $this->stop('msg_invalid_auth_key'); // 인증 정보가 맞다면 새비밀번호로 비밀번호를 바꾸고 인증 상태로 바꿈 - $args->password = md5($output->data->new_password); + if ($output->data->is_register == 'Y') { + $args->password = $output->data->new_password; + $args->denied = 'N'; + } + else { + $args->password = md5($output->data->new_password); + unset($args->denied); + } + + // $output->data->is_register 값을 백업해 둔다. + $is_register = $output->data->is_register; + $output = executeQuery('member.updateMemberPassword', $args); if(!$output->toBool()) return $this->stop($output->getMessage()); @@ -1175,6 +1201,7 @@ executeQuery('member.deleteAuthMail',$args); // 결과를 통보 + Context::set('is_register', $is_register); $this->setTemplatePath($this->module_path.'tpl'); $this->setTemplateFile('msg_success_authed'); } @@ -1274,7 +1301,12 @@ if($password && !$oMemberModel->isValidPassword($member_info->password, $password)) return new Object(-1, 'invalid_password'); // denied == 'Y' 이면 알림 - if($member_info->denied == 'Y') return new Object(-1,'msg_user_denied'); + if($member_info->denied == 'Y') { + $args->member_srl = $member_info->member_srl; + $output = executeQuery('member.chkAuthMail', $args); + if ($output->toBool() && $output->data->count != '0') return new Object(-1,'msg_user_not_confirmed'); + return new Object(-1,'msg_user_denied'); + } // 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"))); @@ -1380,14 +1412,13 @@ // 필수 변수들의 조절 if($args->allow_mailing!='Y') $args->allow_mailing = 'N'; + if($args->denied!='Y') $args->denied = 'N'; if(!in_array($args->allow_message, array('Y','N','F'))) $args->allow_message= 'Y'; if($logged_info->is_admin == 'Y') { - if($args->denied!='Y') $args->denied = 'N'; if($args->is_admin!='Y') $args->is_admin = 'N'; } else { unset($args->is_admin); - unset($args->denied); } list($args->email_id, $args->email_host) = explode('@', $args->email_address); @@ -1450,6 +1481,40 @@ } } + // 메일 인증 모드 사용시(가입된 회원이 denied일 때) 인증 메일 발송 + if ($args->denied == 'Y') { + // 인증 DB에 데이터를 넣음 + $auth_args->user_id = $args->user_id; + $auth_args->member_srl = $args->member_srl; + $auth_args->new_password = $args->password; + $auth_args->auth_key = md5(rand(0, 999999)); + $auth_args->is_register = 'Y'; + + $output = executeQuery('member.insertAuthMail', $auth_args); + if (!$output->toBool()) { + $oDB->rollback(); + return $output; + } + + // 메일 내용을 구함 + Context::set('auth_args', $auth_args); + Context::set('member_info', $args); + $oTemplate = &TemplateHandler::getInstance(); + $content = $oTemplate->compile($this->module_path.'tpl', 'confirm_member_account_mail'); + + // 사이트 웹마스터 정보를 구함 + $oModuleModel = &getModel('module'); + $member_config = $oModuleModel->getModuleConfig('member'); + + // 메일 발송 + $oMail = new Mail(); + $oMail->setTitle( Context::getLang('msg_confirm_account_title') ); + $oMail->setContent($content); + $oMail->setSender( $member_config->webmaster_name?$member_config->webmaster_name:'webmaster', $member_config->webmaster_email); + $oMail->setReceiptor( $args->user_name, $args->email_address ); + $oMail->send(); + } + // trigger 호출 (after) if($output->toBool()) { $trigger_output = ModuleHandler::triggerCall('member.insertMember', 'after', $args); @@ -1598,8 +1663,15 @@ $oDB = &DB::getInstance(); $oDB->begin(); - // member_group_member에서 해당 항목들 삭제 $args->member_srl = $member_srl; + // member_auth_mail에서 해당 항목들 삭제 + $output = executeQuery('member.deleteAuthMail', $args); + if (!$output->toBool()) { + $oDB->rollback(); + return $output; + } + + // member_group_member에서 해당 항목들 삭제 $output = executeQuery('member.deleteMemberGroupMember', $args); if(!$output->toBool()) { $oDB->rollback(); diff --git a/modules/member/queries/chkAuthMail.xml b/modules/member/queries/chkAuthMail.xml new file mode 100644 index 000000000..9505632a9 --- /dev/null +++ b/modules/member/queries/chkAuthMail.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/modules/member/queries/insertAuthMail.xml b/modules/member/queries/insertAuthMail.xml index fcf065f52..465b9a21a 100644 --- a/modules/member/queries/insertAuthMail.xml +++ b/modules/member/queries/insertAuthMail.xml @@ -7,6 +7,7 @@ + diff --git a/modules/member/queries/updateMemberPassword.xml b/modules/member/queries/updateMemberPassword.xml index a4ca62e92..ff3c64fd6 100644 --- a/modules/member/queries/updateMemberPassword.xml +++ b/modules/member/queries/updateMemberPassword.xml @@ -4,6 +4,7 @@ + diff --git a/modules/member/schemas/member_auth_mail.xml b/modules/member/schemas/member_auth_mail.xml index 52cbf1fff..d89d5d34d 100644 --- a/modules/member/schemas/member_auth_mail.xml +++ b/modules/member/schemas/member_auth_mail.xml @@ -3,5 +3,6 @@ +
diff --git a/modules/member/tpl/confirm_member_account_mail.html b/modules/member/tpl/confirm_member_account_mail.html new file mode 100644 index 000000000..d2dda240c --- /dev/null +++ b/modules/member/tpl/confirm_member_account_mail.html @@ -0,0 +1,12 @@ +{$lang->msg_confirm_account_info}
+
+
    +
  • Site : {getUrl()}
  • +
  • {$lang->user_id} : {$member_info->user_id}
  • +
  • {$lang->user_name} : {$member_info->user_name}
  • +
  • {$lang->nick_name} : {$member_info->nick_name}
  • +
  • {$lang->email_address} : {$member_info->email_address}
  • +
+
+{$lang->msg_confirm_account_comment}
+{getUrl('','module','member','act','procMemberAuthAccount','member_srl',$member_info->member_srl,'auth_key',$auth_args->auth_key)} diff --git a/modules/member/tpl/member_config.html b/modules/member/tpl/member_config.html index d605c1df0..5af5138c8 100644 --- a/modules/member/tpl/member_config.html +++ b/modules/member/tpl/member_config.html @@ -37,6 +37,13 @@ {$lang->about_enable_join} + + {$lang->enable_confirm} + + enable_confirm=='Y')-->checked="checked" class="checkbox" /> + {$lang->about_enable_confirm} + + {$lang->enable_ssl} diff --git a/modules/member/tpl/msg_success_authed.html b/modules/member/tpl/msg_success_authed.html index 776c0c8e0..677ef2a9f 100644 --- a/modules/member/tpl/msg_success_authed.html +++ b/modules/member/tpl/msg_success_authed.html @@ -1,4 +1,8 @@