| 제목 | CI hooks 로 로그인 인증 체크하기 질문 | ||
|---|---|---|---|
| 카테고리 | CI 2, 3 | ||
| 글쓴이 | 학학이 | 작성시각 | 2016/09/07 13:58:18 | 
|  | |||
| CI hooks 질문있습니다. 
 기존 코드는 각 컨트롤러 생성자에서 현재 로그인이 되어 있는지 체크합니다. 
 controllers/user.php 
$this->cookie = $this->loginlibrary->login_check();
//
if ($this->cookie['is_login'] == true) {
    // 로그인 되어 있다면...
    $this->user_id = $this->cookie['user_id'];
} else {
    if ( empty($_SERVER['REQUEST_URI']) ) $return_url = "/user/info";
    else $return_url = $_SERVER['REQUEST_URI'];
    move_login_page($return_url);
}
 문제는 모든 컨트롤러마다 생성자에 이 코드가 존재합니다. 
 그래서 이 부분을 찾아 보던중 hooks 를 알게 되었습니다. http://www.codeigniter-kr.org/bbs/view/tip?idx=8009&page=4&view_category=&lists_style= 이 내용을 읽고 적용하려고 하는데 hooks를 TRUE로 주면 아무것도 안나옵니다. 
 hooks/Acl.php 
<?php
class Acl {
    function checkPermission() {
        $CI =& get_instance();
        echo "aaaa";
        if (isset($CI->allow) && (is_array($CI->allow) === false OR in_array($CI->router->method, $CI->allow) === false)) {
            $this->cookie = $this->loginlibrary->login_check();
    		if ( $this->cookie['login_chk'] == true ) {
    			// 로그인 되어 있다면...
    			$this->user_id = $this->cookie['user_id'];
    		} else {
    			if ( empty($_SERVER['REQUEST_URI']) ) {
                    $return_url = "/user/info";
                } else {
                    // $return_url = $_SERVER['REQUEST_URI'];
                    redirect("https://www.test.com/login/login_form.php");
                }
    		}
        }
    }
}
?>
post_controller_constructor 가 메소드들이 호출되기 직전에 후킹해서 어떤 일련의 작업을 마치고 다시 돌아온다는 개념으로 이해하고 
 이런식으로 테스트를 해보려 하는데 흰 페이지만 나올뿐입니다. ( 모든 페이지 모두 ) 
 Acl.php 에서는 로그인 상태가 아닐때만 redirect하고 로그인 상태일때는 아무것도 안하는 건가요? hooks에서 뭐가 잘못되면 흰 페이지가 나오나요? 소스보기해도 아무것도 없습니다. 
 
 
 추가적으로 만약 hooks 가 제대로 잘 작동할때 hooks 가 가져온 쿠키정보에서 $user_id를 넘겨주려면 return 하면 되나요?> | |||
| 다음글 | CI 세션파일 문의 드립니다. [자답] (2) | ||
| 이전글 | CI 중복 제거 함수 질문 (3) | ||
| 
                                kaido
                                /
                                2016/09/07 15:08:30 /
                                추천
                                0
                             | 
| 
                                변종원(웅파)
                                /
                                2016/09/07 15:29:53 /
                                추천
                                0
                             
                                $this->loginlibrary->login_check(); 이것도 사용하려면 선언해줘야 합니다.
                             | 
| 
                                학학이
                                /
                                2016/09/07 16:22:28 /
                                추천
                                0
                             @kaido 그렇군요. 그럼 hooks에서 생성된 변수는 post_controller_constructor 이후 각 컨트롤러로 돌아오면 삭제되나요? hooks에서 생성한 변수를 각 컨트롤러에서 사용하려면 다른작업을 해줘야하나요? 
 @번종원 감사합니다. 각각 완전 다른거로 생각해야하네요 | 
기억이 맞다면... private $CI; function __construct() { $this->CI =& get_instance(); if(!isset($this->CI->session)){ //Check if session lib is loaded or not $this->CI->load->library('session'); //If not loaded, then load it here } } hook 안에서 다시 한번 라이브러리 로드해 줘야 할겁니다.hook 하고 컨트롤러 영역하고 전혀 다른 영역이라고 생각 하시는게 편해요.