CakePHP - 如何允许对特定页面进行未经身份验证的访问

时间:2013-08-02 10:49:57

标签: php cakephp login

我创建了一个CakePHP应用程序,我创建了一个UsersController,它处理所有用户。 当我尝试浏览www.mydomain.com时,如果我已登录,则让我看到索引(app/View/Pages/home.ctp)。否则,它会将我重定向到mydomain.com/users/login并继续登录。

我曾尝试查看AppController.phpPagesController.phpapp/Config/core.phpapp/Config/routes.php,但未找到任何内容。我认为我的UsersController.php也不对此负责。

我不记得了,我找不到如何禁用它。哪个文件应该对此负责?

编辑:我的CakePHP版本是2.3。

1 个答案:

答案 0 :(得分:1)

通常,您可以使用auth components allow() method公开具体操作。

公开网页可能需要更多工作,以防您只想公开特定网页,因为PagesController处理单个操作中的所有网页(display())。如果是这种情况,那么您可以使用保留页面名称的request->params['pass'][0],针对允许的网页列表对其进行测试,然后使用display允许Auth::allow操作。

示例,在PagesController

public function beforeFilter()
{
    parent::beforeFilter();

    $allowedPages = array('home', 'foo', 'bar');
    if(isset($this->request->params['pass'][0]) &&
       in_array($this->request->params['pass'][0], $allowedPages))
    {
        $this->Auth->allow('display');
    }
}

这样就可以在不登录的情况下查看网页homefoobar

如果您想公开所有页面,那么您可以在没有任何条件的情况下使用Auth::allow,即:

public function beforeFilter()
{
    parent::beforeFilter();
    $this->Auth->allow('display');
}