我正在寻找根据用户当前是否登录来返回应用程序主页的最佳方式。
似乎beforeFilter
's 的allow()
功能可以对此有所帮助,但看起来该功能确实会重定向用户。
相反,如果用户登录,我更喜欢特定的控制器(例如,显示用户模型的“主页”视图)显示,但为未登录的用户返回静态主页。不需要任何重定向,因为它们将使用相同的 URL 请求显示。
有这样做的标准方法吗?我还推断,也许我可以routes.php
使用条件进行修改,但AuthComponent在请求的这个阶段不可用。
我正在寻找根据用户当前是否登录来返回应用程序主页的最佳方式。
似乎beforeFilter
's 的allow()
功能可以对此有所帮助,但看起来该功能确实会重定向用户。
相反,如果用户登录,我更喜欢特定的控制器(例如,显示用户模型的“主页”视图)显示,但为未登录的用户返回静态主页。不需要任何重定向,因为它们将使用相同的 URL 请求显示。
有这样做的标准方法吗?我还推断,也许我可以routes.php
使用条件进行修改,但AuthComponent在请求的这个阶段不可用。
你有一个指向你的控制器动作的路由,比如说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
使用 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() )
),如果用户成功登录,它只会执行里面的代码。