2011-08-16 3 views
0

사용자가 로그인하지 않은 경우 기존 컨트롤러를 덮어 쓰고 브라우저 URI를 그대로 유지하면서 auth/login을 호출하고 싶습니다. (모든 사용자가 사이트를 사용하려면 로그인해야합니다.)코드 이그니 터 2 - 컨트롤러/메소드 오버라이드

전 컨트롤러 후크를 사용해 보았지만 너무 일찍 왔습니다. 이 시점까지는 인증 라이브러리가 인스턴스화되지 않았습니다. 대상 컨트롤러가 인스턴스화 된 것처럼 후 컨트롤러 후크가 너무 늦습니다.

.. 도서관의 생성자가 이미 생성 .. 그래서 내가 조금 끼 었어 된 바와 같이, 또한 무의미한 것 같다

어떤 아이디어하시기 바랍니다 편집? :) ..

감사

답변

4

기본 컨트롤러를 무시하고 각 컨트롤러에서 확장합니다. 그런 다음

class Secure_Controller extends CI_Controller { 

    function __construct() { 
     parent::__construct(); 

     /* replace this code with yours */ 
     if(!$this->session->userdata('logged_in')) { 
      redirect(base_url() . 'login', 'refresh'); // your login url 
     } 
    } 
} 

당신이 내가 가진

class Main extends Secure_Controller { 
+0

좋은 답변입니다. 이것은 당신이 어떻게하는지 보여줄 것입니다. http://philsturgeon.co.uk/news/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY –

+0

응답 해 주셔서 감사합니다. 나는 이것을 일종의 프록시 역할을하는 _remap이라는 메서드와 함께 사용했다. 다시 한번 감사드립니다. – Lee

0

가지고 방금 다른 컨트롤러 (로그인 페이지)로 방문자를 리디렉션하고 단지 숨겨진 양식 필드에 참조 페이지를 가하고, flashdata하는 URI를 저장하는 생각? Codeigniter를 사용하는 사이트에서 동일한 작업을 수행하고 있습니다. 유일한 차이점은이 과정에서 URI가 손상되지 않는다는 것입니다.

+0

로그인 한 사용자가 액세스 할 수 있어야 각 컨트롤러에서이 코드를 사용 : 다음 코드 ./app/core/MY_Controller.php을 : 새 파일을 만듭니다 그것이 "확실하다"라고 생각하는 것으로 생각했다. 해커가 리다이렉트가 일어나지 못하도록 막아 버리면 컨트롤러가 계속 진행되고 완료된다. 리디렉션이 코드 점화기 실행 프로세스를 중단 시키나요? – Lee

관련 문제