CI 묻고 답하기

제목 [검토부탁] 간단한 로그인 MVC
글쓴이 배강민 작성시각 2010/04/06 17:10:16
댓글 : 3 추천 : 1 스크랩 : 0 조회수 : 48124   RSS
배강민

수고들 많으십니다..

몇일 끙끙거리면서 나름 고민도 좀 하고...

기존 하드코딩(?)과 하드URL(?)의 개념이 잘 뭉개지질 않아서.. 고생했네요....

MVC 구조에 정답이란 없겠지만... 대략 트랜드 및 적절성에 대한 조언을 들어보고자 허접한 코드를 올려봅니다...

일단 구조(?)는

member/login에서 폼을 때리고,, 같은 function 인 login 내에서 폼검증을 해서 값이 있으면 로그인 시도하는...

고집해오던 login.php -> login_ok.php 를 버리려고 머리를 싸맸습니다..휴.. login_ok 라는 function 을 만들어서 하려고도 하다가...흠... 뭐가 좋은건지는 아직 확신이 안섰지만...

일단 Controller입니다. (member.php)

 

<?php

	/*
	|---------------------------------------------------------------
	| member.php
	|---------------------------------------------------------------
	|
	| * 회원 관련 콘트롤
	| * Date : 2010.04
	| * Author : BaeKangMin
	| * functions : login (form), _loginOk (session write), logout (session destroy), 
	|
	*/
	
	class Member extends Controller {
	
		function Member()
		{
			parent::Controller();
	
			//html 캐쉬 생성
			//$this->output->cache(5); //5분단위...
						
			//모델 호출 (기본)
			$this->load->model('member_model');
			
			//url, form helper
			$this->load->helper(array('url', 'form'));
			
			//form validation, session
			$this->load->library(array('form_validation', 'session'));

			//rtnUrl
			if(!@$this->uri->segment(3)) 
			{
				$this->rtnUrl = '';
			} else {
				$this->rtnUrl = rawurldecode(base64_decode(@$this->uri->segment(3)));
			}
								
		}
		
		function login()
		{		
			//로그인한 상태면
			if( $this->session->userdata('user_id') != NULL )
			{
				redirect('');
			//로그인하지 않은 상태면
			} else {
				$this->_loginOk();
			}
		}
		
		//private
		function _loginOk()
		{
									
			//rules
			$this->form_validation->set_rules('loginId', '아이디', 'trim|required|xss_clean|alpha_numeric');
			$this->form_validation->set_rules('loginPass', '비밀번호', 'trim|required|xss_clean');

			//request
			$reqLoginId = $this->input->post('loginId');
			$reqLoginPass = $this->input->post('loginPass');
			
			//폼검증 성공이면
			if ($this->form_validation->run() == TRUE) 
			{
				$loginRst = $this->member_model->loginOK($reqLoginId, $reqLoginPass);
				
				if($loginRst == TRUE)
				{
					redirect($this->rtnUrl);
				} else {
					$data['errorMsg'] = "아이디/비밀번호를 다시 확인하시기 바랍니다.";
					$this->layout->view('member_login_view', $data);	
				}
			//폼검증 실패거나 기본..
			} else {
				$this->layout->view('member_login_view');		
			}

		}
				
		function logout()
		{
			//session destroy
			$this->session->sess_destroy();
			redirect($this->rtnUrl);
		}
		
		function index()
		{
			redirect('member/login');
		}
	}

/* End of file member.php */
/* Location: ./system/application/controllers/member.php */
Model 입니다. (member_model.php)

<?php

	/*
	|---------------------------------------------------------------
	| member_model.php
	|---------------------------------------------------------------
	|
	| * 회원 관련 모델
	| * Date : 2010.04
	| * Author : BaeKangMin
	|
	*/
	
	class Member_model extends Model {
	
	    function Member_model()
	    {
	        parent::Model();
			
			//DB 수동 연결
			$this->oracleMobile3 = $this->load->database('oracleMobile3', TRUE);			
	    }
		
		function loginOk($id, $pwd)
		{			
			$this->oracleMobile3->trans_start();
			$qry = " SELECT user_id, user_name FROM ksky_user WHERE user_id = ? AND user_pwd = ? ";
			$rst = $this->oracleMobile3->query($qry, array($id, $pwd));
			$this->oracleMobile3->trans_complete();		
			
			//$data = $rst->result();			
			$data = $rst->row(); //한줄이면 되니까...
			
			$this->oracleMobile3->close();
			
			if( isset($data->USER_ID) )
			{
				//session write
				$this->session->set_userdata(array('user_id' => $data->USER_ID, 'user_name' => $data->USER_NAME));
				
				return TRUE;				
			}
	
			return FALSE;
		}
	
	}

/* End of file member_model.php */
/* Location: ./system/application/models/member_model.php */
View입니다. (member_login_view.php)

<?php

	//폼검증 에러 표출
	if(validation_errors() !== "")
	{
		?>
		<script language="JavaScript" type="text/javascript">
		//<!--
			alert("<?=str_replace("\n", "\\n", strip_tags(validation_errors()))?>");
		//-->
		</script>
		<?
	}
	
	//로그인 실패 에러
	if(isset($errorMsg) && $errorMsg !== "") 
	{
		?>
		<script language="JavaScript" type="text/javascript">
		//<!--
			alert("<?=$errorMsg?>");
		//-->
		</script>		
		<?
	}
?>

<?php 	
	$attributes_loginForm = array('class' => 'loginForm', 'id' => 'loginForm'); 
?>

<script language="JavaScript" type="text/javascript">
//<!--
	$(document).ready(function() {
	    $("#loginForm :input:visible:enabled:first").focus(); //입력 가능한 첫 input에..
		//$("#loginId").focus(); // fixed
	});
//-->
</script>

<?php echo form_open('member/login', $attributes_loginForm); ?>
	<ul>
		<fieldset>
			<li>
				<input type = "text" name = "loginId" value = "<?php echo set_value('loginId'); ?>" id = "loginId" maxlength = "20" size = "50"  />
			</li>
			<li>
				<input type = "password" name = "loginPass" value = "" id = "loginPass" maxlength = "20" size = "50"  />
			</li>
		</fieldset>
			<li>
				<input type = "image" name = "loginSubmit" src = "<?=ROOT?>/images/btn/login.gif" />
			</li>
	</ul>
</form>
바쁘시겠지만.. 시간 되시는 분들 계시면 한번 검토 후 조언 부탁드려봅니다.

허접해서 쑥스럽네요...ㅋ

감사합니다. 수고하십시오.
 다음글 null, 공백 체크 방법? (2)
 이전글 [초보]모바일 이그나이터 (4)

댓글

변종원(웅파) / 2010/04/06 17:27:21 / 추천 0
네. 잘 만드셨네요. ^^
헛발이 / 2010/04/06 17:31:11 / 추천 0
직접 만들어도 되지만.. 저 같은 경우는 tank_auth라이브러리를 사용 하고 있습니다.

다운로드는  http://www.konyukhov.com/soft/tank_auth/ 여기서 가능하고요..

다운 받은 후에 application에 덮어치기 하면 사용가능하고요...

저 같은 경우는 여기 소스를 보면서 ci를 시작하게 되었답니다...

참고 하세요~
엥?무새 / 2015/06/25 04:52:36 / 추천 0
5년전 거라 걱정이 좀 되지만.. 참고해서 로그인 기능 만들었어요. 감사합니다~