2011-02-01 3 views
0

www.cakephp.org 웹 사이트의 acl tutorial에 따라 보안을 구현했습니다. 어떤 코드 라인이 로그인 페이지로 로딩되지 않았 으면 사용자를 리디렉션 할 책임이 있는지 알아 내려고합니다. 테스트로서 app_controller.php의 beforefilter() 함수에서 여러 라인을 주석 처리했습니다. 이제는 다음과 같이 보입니다 :로그인 페이지로 리다이렉트하고있는 라인을 파악하려고 시도했습니다.

function beforeFilter() { 
     //Configure AuthComponent 
     $this->Auth->authorize = 'actions'; 
     $this->Auth->actionPath = 'controllers/'; 




    // $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
    // $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login'); 

     // $this->Auth->loginRedirect = array('controller' => 'alerts', 'action' => 'home'); 
     // $this->Auth->loginRedirect = array('controller' => 'schedules', 'action' => 'index'); 
     $this->Auth->allowedActions = array('display'); 


    } 

그러나 여전히 로그인 페이지로 리디렉션됩니다.

내 cakephp 사이트가 프록시 서버를 통해 제공되기 때문에 상대 URL 참조를 사용해야하지만 로그인 리디렉션이 절대 참조를 사용하고 있기 때문에 내가 이것에 대해 묻는 이유가 있습니다.

+0

나는 리디렉션을 통해 "헤더를 보낼 수 없습니다. 이미 출력이 시작되었습니다"라는 오류를보고 할 수 있도록 오류를 출력하려고합니다. (실제로 케이크가 출력 버퍼를 사용하고 있는지 기억하지 못합니다. 아마도 헤더를 보낼 것인가?). – Kemo

답변

1

실제 리디렉션은 AuthComponent :: startup()에서 수행됩니다. AuthComponent :: isAuthorized()가 호출되고, Acl이 구성된 경우 Acl이 검사를 수행하는 데 사용됩니다.

beforeFilter()의 설정을 변경해도 동작에 아무런 영향을 미치지 않습니다. 더 많은 가능성보다, 당신은 Acl-> 확인 (실패) 여기를 참조하십시오 (450)

줄에 리디렉션 - https://github.com/cakephp/cakephp/blob/master/cake/libs/controller/components/auth.php#L309https://github.com/cakephp/cakephp/blob/master/cake/libs/controller/components/auth.php#L450

가능성이 최우선 도우미를 보면, 당신의 리디렉션 관련 문제를 처리하기 위해 :: url(). app/app_helper.php를 만들고 Helper를 확장 한 AppHelper 클래스를 정의하고 url 메소드를 제공하십시오. 전달 된 인수를 검사하고 적절한 url을 반환하십시오.

관련 문제