2012-07-23 3 views
0
나는 뷰는 app/config/core.php에서 다음 옵션

CakePHP의 인증은 무시

class DiaryController extends AppController { 
    ... 
    var $cacheAction = array('index' => "+56 hours"); 

    function index($week = null) { 
    ... 
    } 
} 

를 사용하여 내 컨트롤러의 index 액션에 설정 캐싱 한

:

Configure::write('Cache.check', true); 

... 

Cache::config('default', array('engine' => 'File')); 

AuthComponent

class AppController extends Controller { 

    ... 
    var $components = array('Auth', 'Security', 'Session','Cookie','RequestHandler'); 

    function beforeFilter() { 

    $this->Auth->userModel = 'Admin'; 
    ... 
    } 
... 
} 
0123을 사용하여 일기 컨트롤러 (및 나머지 사이트!)의 색인 작업은 인증 된 사용자 만 액세스 할 수 있어야합니다.

나는 app/config/routes.php

Router::connect('/', array('controller' => 'admin', 'action' => 'login')); 

를 사용하여 내 로그인 양식에 사이트의 루트를 매핑 할. 로그 아웃 한 다음 브라우저에서 mytestsite.com/diary/index을 방문하려고 시도 할 때까지 모두 제대로 작동하는 것으로 보입니다. 로그인하지 않은 상태에서도 여전히 페이지에 액세스 할 수 있습니다. 파일이있는 URL에만 액세스 할 수 있기 때문에 캐싱 관련 문제라고 생각합니다. app/tmp/cache/views. 인덱스 작업의 $week 매개 변수를 캐시 파일이없는 값으로 변경하면 You are not authorized to access that location. 메시지가 나타납니다.

이상한 것은 내가 (app/config/routes.php에서 다시)

Router::connect('/', array('controller' => 'diary', 'action' => 'index')); 

과 함께 DiaryController의 인덱스 액션에 사이트의 루트를하게되면, 나는이 문제 야가 액세스 할 수 없습니다 필요가 없다는 것입니다 로그인하지 않은 상태에서 캐시 된 일기 인덱스 뷰.

누구든지이 문제가 발생 했습니까? 내가 놓쳤을지도 모르는 것을 제안 해 주시겠습니까? 아니면 이것이 코어 파일의 버그인지 아십니까? CakePHP 1.3.15를 사용하고 있습니다.

답변

1

이것은 늦은 응답이지만,보기 작업을 캐시하면 모든 컨트롤러 및 구성 요소 콜백이 무시됩니다. Auth 구성 요소는 콜백을 통해 해당 작업을 수행합니다. 따라서 작업을 캐시하면 해당 검사가 무시됩니다.

당신은 다음과 같이 $ cacheAction으로에서 => 진정한 옵션에 '콜백'을 전달하여 화재 콜백을 강제 할 수

:

public $cacheAction = array(
    'index' => array('callbacks' => true, 'duration' => '+56 hours') 
); 

하지만 그건 부분적으로 모두를 무시하는 것입니다보기 캐싱의 목적을 패배 컨트롤러 논리

자세한 정보 here.