2012-07-23 30 views
0

我已經查看緩存設置使用CakePHP的驗證忽略了與「/」某些路由訪問緩存的視圖時

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

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

與下列選項我的控制器的索引動作app/config/core.php

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'; 
    ... 
    } 
... 
} 

我想在app/config/routes.php使用

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

到站點的根目錄映射到我的登錄表單。所有似乎都可以正常工作,直到我退出,然後嘗試在瀏覽器中訪問mytestsite.com/diary/index。即使我沒有登錄,我仍然可以訪問這些頁面。我認爲這是緩存問題,因爲我只能訪問我在app/tmp/cache/views中擁有文件的網址。將索引操作的$week參數更改爲一個值,該值對於You are not authorized to access that location.消息中的結果沒有緩存文件。

奇怪的是,如果我站點映射到DiaryController的索引行爲的根源,與

Router::connect('/', array('controller' => 'diary', 'action' => 'index')); 
(在 app/config/routes.php再次)

我沒有這個疑難問題無法訪問當我沒有登錄時,緩存的日記索引視圖。

有沒有人遇到過這個問題?你能提出一些我可能錯過的東西嗎?或者你知道這是否是核心文件中的錯誤?我正在使用CakePHP 1.3.15。

回答

1

這是一個延遲響應,但原因是緩存視圖操作繞過所有控制器和組件回調。 Auth組件通過回調來完成它的工作。所以,當你緩存一個動作時,這些檢查將被忽略。

您可以強制回調傳遞一個「回調」 => true選項在$ CACHEACTION,這樣火:

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

但是,這部分擊敗視圖緩存,這是繞過所有的目的控制器邏輯。

更多信息here