userlib->is_user() !== false && ! ($this->userlib->is_admin() === 'super' && $this->uri->segment(1) === config_item('uri_segment_admin'))) { redirect(); } $view = array(); $view['view'] = array(); $this->load->library(array('form_validation')); if ( ! function_exists('password_hash')) { $this->load->helper('password'); } $use_login_account = $this->configlib->item('use_login_account'); /** * 전송된 데이터의 유효성을 체크합니다 */ $config[] = array( 'field' => 'user_email', 'label' => '이메일', 'rules' => 'trim|required|valid_email', ); $view['view']['useremail_label_text'] = '이메일'; $config[] = array( 'field' => 'user_password', 'label' => '패스워드', 'rules' => 'trim|required|min_length[4]|callback__check_id_pw[' . $this->input->post('user_email') . ']', ); $this->form_validation->set_rules($config); /** * 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다. * 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다 */ if ($this->form_validation->run() === false) { if ($this->input->post('returnurl')) { if (validation_errors('')) { $this->session->set_flashdata( 'loginvalidationmessage', validation_errors('') ); } $this->session->set_flashdata( 'loginuseremail', $this->input->post('user_email') ); redirect(urldecode($this->input->post('returnurl'))); } /** * 레이아웃을 정의합니다 */ $layoutconfig = array( 'path' => 'login', 'layout' => 'layout', 'skin' => 'login', ); $view['layout'] = $this->layoutlib->front($layoutconfig, $this->configlib->get_device_view_type()); $this->data = $view; $this->layout = element('layout_skin_file', element('layout', $view)); $this->view = element('view_skin_file', element('layout', $view)); } else { /** * 유효성 검사를 통과한 경우입니다. * 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다 */ $userinfo = $this->User_model->get_by_email($this->input->post('user_email'), 'user_id, user_email'); $this->session->set_userdata( 'user_id', element('user_id', $userinfo) ); $site_title = $this->configlib->item('site_title'); $url_after_login = $this->configlib->item('url_after_login'); if ($url_after_login) { $url_after_login = site_url($url_after_login); } if (empty($url_after_login)) { $url_after_login = $this->input->get_post('url') ? urldecode($this->input->get_post('url')) : site_url(); } redirect($url_after_login); } } /** * 로그인 페이지입니다 */ public function nopage() { $view = array(); $view['view'] = array(); $layoutconfig = array( 'path' => 'login', 'layout' => 'layout', 'skin' => 'login_nopage', 'layout_dir' => $this->configlib->item('layout_login'), 'mobile_layout_dir' => $this->configlib->item('mobile_layout_login'), 'use_sidebar' => $this->configlib->item('sidebar_login'), 'use_mobile_sidebar' => $this->configlib->item('mobile_sidebar_login'), 'skin_dir' => $this->configlib->item('skin_login'), 'mobile_skin_dir' => $this->configlib->item('mobile_skin_login'), ); $view['layout'] = $this->layoutlib->front($layoutconfig, $this->configlib->get_device_view_type()); $this->data = $view; $this->layout = element('layout_skin_file', element('layout', $view)); $this->view = element('view_skin_file', element('layout', $view)); } /** * 로그인시 아이디와 패스워드가 일치하는지 체크합니다 */ public function _check_id_pw($password, $useremail) { if ( ! function_exists('password_hash')) { $this->load->helper('password'); } $max_login_try_count = (int) $this->configlib->item('max_login_try_count'); $max_login_try_limit_second = (int) $this->configlib->item('max_login_try_limit_second'); $use_login_account = $this->configlib->item('use_login_account'); $userselect = 'user_id, user_password, user_denied, user_email_cert, user_is_admin'; $userinfo = $this->User_model->get_by_email($useremail, $userselect); $hash = password_hash($password, PASSWORD_BCRYPT); if ( ! element('user_id', $userinfo) OR ! element('user_password', $userinfo)) { $this->form_validation->set_message( '_check_id_pw', '회원 아이디와 패스워드가 서로 맞지 않습니다' ); return false; } elseif ( ! password_verify($password, element('user_password', $userinfo))) { $this->form_validation->set_message( '_check_id_pw', '회원 아이디와 패스워드가 서로 맞지 않습니다' ); return false; } elseif (element('user_denied', $userinfo)) { $this->form_validation->set_message( '_check_id_pw', '회원님의 아이디는 접근이 금지된 아이디입니다' ); return false; } elseif ($this->configlib->item('use_register_email_auth') && ! element('user_email_cert', $userinfo)) { $this->form_validation->set_message( '_check_id_pw', '회원님은 아직 이메일 인증을 받지 않으셨습니다' ); return false; } return true; } /** * 로그아웃합니다 */ public function logout() { if ($this->userlib->is_user() === false) { redirect(); } $this->session->sess_destroy(); $url_after_logout = $this->configlib->item('url_after_logout'); if ($url_after_logout) { $url_after_logout = site_url($url_after_logout); } if (empty($url_after_logout)) { $url_after_logout = $this->input->get_post('url') ? $this->input->get_post('url') : site_url(); } redirect($url_after_logout, 'refresh'); } }