| 제목 | 초보팁] 모든 페이지에서 로그인여부 검사하기 | ||
|---|---|---|---|
| 글쓴이 | 마PD | 작성시각 | 2016/02/12 17:56:22 | 
| 
                         | 
                |||
| 
                         다음 글의 도움을 받았습니다. 
 TIP게시판, [로그인 체크 자동화] : http://codeigniter-kr.org/bbs/view/tip?idx=8009 강좌게시판, [심플하게 hook 사용 방법] : http://cikorea.net/bbs/view/lecture?idx=12894&page=1&hit=not&lists_style= CI 묻고 답하기, [로그인 여부 체크하기] : http://codeigniter-kr.org/bbs/view/qna?idx=12891&page=1&view_category=&lists_style= CI 묻고 답하기, [hook 사용시 이해가 잘 안되는 점..] : http://codeigniter-kr.org/bbs/view/qna?idx=12879&page=1&view_category=&lists_style= 
 오늘 하루종일 삽질하고 얻은 결과를 정리했습니다.^^ 틀린게 있으면 지적 부탁드립니다. 
 1. 모든 페이지에서 로그인여부를 검사하기 -> 관리자 툴, 인트라넷 등 모든 페이지가 로그인을 한 사용자에게만 보여줘야할때. -> 로그인을 하지 않은 사용자는 강제로 로그인창으로 이동. 
 2. 사용된 것들(?) - 세션 - DB - hooks - url(router) 등. 
 3. 구성도 사용자가 접속한다. -> hooks를 통해 로그인 여부를 먼저 확인한다. -> 로그인 여부는 세션으로 검증한다. ----> (1)--> 로그인 사용자일 경우 -> 메인 컨텐츠로 이동 (2)--> 로그인을 하지 않은 사용자 -> 로그인 화면으로 이동 
 
 4. 만들기 1) application/config/config.php 에서 hooks 를 활성화 시킨다. $config['enable_hooks'] = TRUE; 
 
 2) application/config/hooks.php 에 작동할 파일 및 클래스, 함수 등을 입력한다. (hooks를 사용함으로써 모든 페이지에 로그인 여부를 검사하는 부분을 추가하는 것.) 
$hook['post_controller_constructor'][] = array(
    'class'     => 'Log',
    'function'  => 'checkPermission',
    'filename'  => 'Log.php',
    'filepath'  => 'hooks'
);
 
 3) 실제로 작동할 Log.php 파일을 만들어 준다. application/hook/Log.php 
<?php
class Log {
	function checkPermission()
	{
		$CI =& get_instance();
		$CI->load->library('session');
		$CI->load->helper('url');
		if(isset($CI->allow) && (is_array($CI->allow) === false OR in_array($CI->router->method, $CI->allow) === false))
// 여기에 쓰인 if문을 이해하는데 한참 걸렸습니다..
// $CI->allow 는 배열로, 추후 로그인 없이 사용 가능한 것들을 저장할때 사용합니다.
// 가령 로그인 화면이나 문의화면 같이 비로그인으로 열어줄 것들을 넣어주게 됩니다.
		{
			if (!$CI->session->userdata('userid')) // 로그인 여부를 세션을 이용해 체크한다.
			{ 
				redirect(''); // 로그인창으로 강제 이동
			}
		}
	}
}
?>
 
 4) 자, 이제 로그인 화면을 띄워줄 컨트롤러를 만들어 줍니다. 저는 첫 컨트롤러로 Main 이라는 이름을 가진 컨트롤러를 사용 합니다. 
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Main extends CI_Controller {
    function __construct()
    {       
        parent::__construct();
        $this->allow=array('login');
    }
	public function login()
	{
        // 이곳에서 로그인 관련 작업을 수행하면 됩니다.
	}
}
 
 5. 그 외에 사용하는 모든 컨트롤러에서도 로그인 없이 사용할 수 있는 함수들을 정해줍니다. 저의 경우는 위의 메인에서 사용하는 로그인 말고는 열어줄게 없어서 다음과 같이 처리 했습니다. controllers/sample.php 
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Sample extends CI_Controller {
    function __construct()
    {       
        parent::__construct();
        $this->allow=array();
    }
}
-> 이렇게 해주지 않으면 그냥 접속이 되더라구요. ㅠ.ㅠ  | 
                |||
| 다음글 | DB TABLE column comment 를 이용한 ... (3) | ||
| 이전글 | aptana 에서 ftp 저장시 오류원인 (4) | ||
| 
                             
                                변종원(웅파)
                                /
                                2016/02/16 16:03:06 /
                                추천
                                0
                             
                            
                                잘 정리해주셨네요. ^^
                             
                         | 
                    
| 
                             
                                강동원
                                /
                                2017/01/12 00:58:07 /
                                추천
                                0
                             
                            
                                감사합니다.
                             
                         | 
                    
| 
                             
                                한대승(불의회상)
                                /
                                2017/01/12 09:12:46 /
                                추천
                                0
                             
                            hook 사용법 끝판왕이네요. 감사 합니다. ^^  | 
                    
| 
                             
                                가리비
                                /
                                2017/02/08 17:54:07 /
                                추천
                                0
                             
                            
                                좋은 정보 감사합니다!
                             
                         | 
                    
| 
                             
                                미나리나물
                                /
                                2017/08/14 13:19:55 /
                                추천
                                0
                             
                            
                                감사합니다!! 꼭 필요한 내용이었어요!!!
                             
                         |