CakePHP3:如何正确检查用户是否登录

CakePHP3:如何正确检查用户是否登录,php,cakephp-3.0,Php,Cakephp 3.0,在CakePHP3中,我找到了两种方法来确定用户是否登录 第一个解决方案 if(!is_null($this->Auth->user('id'))){ // Logged in } if (!is_null($this->request->session()->read('Auth.User.id'))) { // Logged in } 第二种解决方案 if(!is_null($this->Auth->user('id'))

在CakePHP3中,我找到了两种方法来确定用户是否登录

第一个解决方案

if(!is_null($this->Auth->user('id'))){
        // Logged in
}
if (!is_null($this->request->session()->read('Auth.User.id'))) {
    // Logged in
}
第二种解决方案

if(!is_null($this->Auth->user('id'))){
        // Logged in
}
if (!is_null($this->request->session()->read('Auth.User.id'))) {
    // Logged in
}
我认为第一个更好,因为它简短

是否有更好的方法验证用户是否登录?


我不一定要追求速度。我想要一种简洁而富有表现力的写作方式。

我认为最好的方式就是:

if ($this->Auth->user()) {...}

您可以使用
session()
帮助程序执行此操作

$loggeduser = $this->request->session()->read('Auth.User');
if(!$loggeduser) {
    $userID = $loggeduser['id'];
    $firstName = $loggeduser['first_name'];
}

在我的应用程序中,我始终使用如下登录方法:

public function login() {
    if ($this->request->is('post')) {
        $user = $this->Auth->identify();
        if ($user) {
            $this->Auth->setUser($user);
            return $this->redirect($this->Auth->redirectUrl());
        }
        $this->Flash->error('Your username/password is not valid');
    }elseif ($this->Auth->user()) {
        return $this->redirect($this->Auth->redirectUrl());
    }
}

这样,如果用户已登录($this->Auth->user()),并且请求不是POST请求,我将重定向到默认URL。

我最初尝试了
$this->Auth->isAuthorized()
,但这只适用于主页。使用
user()
它可以工作。奇怪。但这是给
致命错误:未捕获错误:调用布尔值上的成员函数user()。我正在
AppController
中使用此代码,因此您的AuthComponent一定有问题。可能它没有正确加载或者被其他东西覆盖了?在3.6.0之前,需要使用getRequest()和getSession(),这样它将是,
$loggeduser=$this->getRequest()->getSession()->read('Auth.User')