如何允许CakePHP根据身份验证/登录状态返回不同的主页?

时间:2012-12-28 23:10:46

标签: cakephp authentication routing

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

beforeFilter的{​​{1}}功能似乎有助于此,但看起来此功能会重定向用户。

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

有没有一种标准的方法可以做到这一点?我还推断也许我可以修改allow()条件,但 AuthComponent 在请求的这个阶段不可用。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

// 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() )),如果用户已成功登录,这将只执行内部代码。