제목 | 초보팁] 모든 페이지에서 로그인여부 검사하기 | ||
---|---|---|---|
글쓴이 | 마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
감사합니다!! 꼭 필요한 내용이었어요!!!
|