CakePHP 3:如何正确检查用户是否已登录

CakePHP 3: How to properly check if a user is logged in

在 CakePHP 3 中,我发现了两种判断用户是否登录的方法。

第一个解决方案

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.