我正在寻找根据用户当前是否登录而返回应用程序主页的最佳方法。
beforeFilter
的{{1}}功能似乎有助于此,但看起来此功能会重定向用户。
相反,如果用户登录,我更喜欢特定的控制器(例如,显示用户模型的“主页”视图),但是为未登录的用户返回静态主页。不应该有任何重定向,因为它们将使用相同的URL请求显示。
有没有一种标准的方法可以做到这一点?我还推断也许我可以修改allow()
条件,但 AuthComponent 在请求的这个阶段不可用。
答案 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() )
),如果用户已成功登录,这将只执行内部代码。