CI 묻고 답하기

제목 CI hooks 로 로그인 인증 체크하기 질문
카테고리 CI 2, 3
글쓴이 학학이 작성시각 2016/09/07 13:58:18
댓글 : 3 추천 : 0 스크랩 : 1 조회수 : 20362   RSS

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
기억이 맞다면...


 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 하고 컨트롤러 영역하고 전혀 다른 영역이라고 생각 하시는게 편해요.

변종원(웅파) / 2016/09/07 15:29:53 / 추천 0
$this->loginlibrary->login_check(); 이것도 사용하려면 선언해줘야 합니다.
학학이 / 2016/09/07 16:22:28 / 추천 0

@kaido 그렇군요. 그럼 hooks에서 생성된 변수는 post_controller_constructor  이후 각 컨트롤러로 돌아오면

삭제되나요? hooks에서 생성한 변수를 각 컨트롤러에서 사용하려면 다른작업을 해줘야하나요?

 

@번종원 감사합니다. 각각 완전 다른거로 생각해야하네요