1

我正在寻找根据用户当前是否登录来返回应用程序主页的最佳方式。

似乎beforeFilter's 的allow()功能可以对此有所帮助,但看起来该功能确实会重定向用户。

相反,如果用户登录,我更喜欢特定的控制器(例如,显示用户模型的“主页”视图)显示,但为未登录的用户返回静态主页。不需要任何重定向,因为它们将使用相同的 URL 请求显示。

有这样做的标准方法吗?我还推断,也许我可以routes.php使用条件进行修改,但AuthComponent在请求的这个阶段不可用。

4

2 回答 2

2

你有一个指向你的控制器动作的路由,比如说OverviewController:

Router::connect('/', array('controller' => 'overview', 'action' => 'homepage'));

然后你动态切换这个动作:

if (!($uid = $this->Session->read('Auth.User.id'))) {
    return $this->render('some_action');
    //or return $this->render('/Pages/some_static_page');
}
// normal homepage action for $uid xyz
于 2012-12-29T00:33:28.667 回答
1

使用 AuthComponent 意味着您无需担心login()UsersController 中的操作(我相信这是默认设置)。但是,如果您在该方法中放入一些代码,您可以让它做任何您想做的事情:

// In users_controller.php
function login()
{   
  if ( $this->Auth->user() ) { 
    if ( $this->Auth->user('role') == USER_ROLE_ADMIN ) { 
      $this->redirect('/admin');
    } else {
      $this->redirect('/');
    }   
  }   
}

请注意检查用户角色并适当重定向的行。同样重要的是最外面的 if 语句 ( if ( $this->Auth->user() )),如果用户成功登录,它只会执行里面的代码。

于 2012-12-28T23:42:52.513 回答