Авторизация

В файле контроллера, в котором надо сделать доступ авторизованным посетителям, надо добавить компонент «Auth».

public $components = ['Auth'];

Теперь при открытии любой страницы текущего контроллера будет происходить перенаправление на страницу «/users/login», где пользователю надо авторизоваться.

По умолчанию страницы авторизации нет. Её можно создать в контроллере.

# src/Controller/UsersController.php

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('Неправильный логин или пароль');
    }
}

И в файле шаблона src/Template/Users/login.ctp добавить следующий код:

<!-- File: src/Template/Users/login.ctp -->

<?= $this->Flash->render() ?>
<?= $this->Form->create() ?>
    <?= $this->Form->control('username') ?>
    <?= $this->Form->control('password') ?>
<?= $this->Form->button('Войти'); ?>
<?= $this->Form->end() ?>

Теперь пользователи могут авторизовываться на сайте.

Выйти из аккаунта

Выйти из аккаунта можно через метод $this->Auth->logout().

# src/Controller/UsersController.php

public function logout()
{
    return $this->redirect($this->Auth->logout());
}

Указать страницы, доступные всем пользователям

Компонент «Auth» делает все страницы текущего контроллера доступными только авторизованным. Указать страницы, которые будут доступны всем можно через метод $this->Auth->allow().

# src/Controller/UsersController.php

use App\Controller\AppController;
use Cake\Event\Event;

class UsersController extends AppController
{
    public function beforeFilter(Event $event)
    {
        parent::beforeFilter($event);

        // сделать доступными страницы «index» и «view»
        $this->Auth->allow(['index', 'view']);
    }
}