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