0

を使用して、コントローラーのインデックスアクションにビューキャッシュを設定しています

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'));

ダイアリー コントローラー (およびサイトの残りの部分) の index アクションは、AuthComponentwithを使用して、認証されたユーザーのみがアクセスできるようにする必要があります。

class AppController extends Controller {

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

  function beforeFilter() {

    $this->Auth->userModel = 'Admin';
    ...
  }
...
}

を使用して、サイトのルートをログインフォームにマップしたい

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

app/config/routes.php。ログアウトしてからmytestsite.com/diary/indexブラウザにアクセスしようとするまで、すべてが正常に機能しているように見えます。ログインしていなくても、ページにアクセスできます。 にファイルがある URL にしかアクセスできないため、これはキャッシュの問題だと思いますapp/tmp/cache/views$weekインデックス アクションのパラメーターをキャッシュ ファイルがない値に変更すると、You are not authorized to access that location.メッセージが表示されます。

奇妙なことに、サイトのルートを の index アクションにマッピングするとDiaryController

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

(再びapp/config/routes.php) この問題はありません。ログインしていないときは、キャッシュされたダイアリー インデックス ビューにアクセスできません。

以前にこの問題を経験した人はいますか? 私が見逃したかもしれない何かを提案できますか?または、これがコア ファイルのバグかどうか知っていますか? CakePHP 1.3.15 を使用しています。

4

1 に答える 1

1

これは遅い応答ですが、その理由は、ビュー アクションをキャッシュすると、すべてのコントローラーとコンポーネントのコールバックがバイパスされるためです。Auth コンポーネントは、コールバックを介して処理を行います。したがって、アクションをキャッシュすると、それらのチェックは無視されます。

次のように、$cacheAction で 'callbacks' => true オプションを渡すことにより、コールバックを強制的に起動できます。

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

しかし、これは、すべてのコントローラー ロジックをバイパスするというビュー キャッシュの目的を部分的に無効にします。

詳細はこちら

于 2012-08-15T20:50:10.137 に答える