Цель – сделать, чтобы при входе (аутентификации) в одном из приложений (frantend или backend) пользователь автоматически был аутентифицирован и в другом.

Для этого нужно выполнить несколько шагов.

1. Создание общих cookie для frantend и backend.
В файл common\config\params-local.php добавляем свойства, которые будут общие для обоих приложений:
<?php
return [
    //ключ для кук общий (frontend + backend)
    'cookieValidationKey' => 'eq4ufHXrZ3CsG3TyYAmStVJT6r7j53-j',

    //домен для кук
    'cookieDomain' => '.site.com',
];
Сам ключ можно выбрать любой или перегенерировать в самом конце на новый командой init.

  • Свойство 'cookieValidationKey' – ключ, по умолчанию устанавливается в двух файлах:
backend\config\main-local.php и
frontend\config\main-local.php
например:
$config = [
    'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => 'eq4ufHXrZ3CsG3TyYAmStVJT6r7j53-j',
        ],
    ],
];
Теперь можно удалить из этих файлов строку с ключем, а в данном примере и весь массив 'components, чтобы осталось':
$config = [];

  • Свойство 'cookieDomain' тут и дальше потребуется если приложения frantend и backend находятся на разных поддоменах. Например
http://site.com
и
http://admin.site.com для backend.
Если же админка (backend) доступна как
http://site.com/admin
свойство 'cookieDomain' указывать не нужно.

Значение свойства 'cookieDomain' должно соответствовать названию основного домена. Точка спереди значит, что cookie будут доступны и на всех его поддоменах (например site.com и на forum.site.com).

При переносе на хостинг, если там домен будет другой – нужно внести изменения в этот файл.



  • Что бы при переносе из репозитория и выполнении команды
init
на другом компьютере или хостинге у нас свойство 'cookieValidationKey' прописалось и сгенерировалось в нужном файле, как и свойство 'cookieDomain', нужно подправить файлы из папки environments.

В файлах environments\dev\common\config\params-local.php и environments/prod/common/config/params-local.php добавляем:
<?php
return [
    //ключ для кук общий (frontend + backend)
    'cookieValidationKey' => '',

    //домен для кук
    'cookieDomain' => '.example.com',
];

В файлах
environments/dev/backend/config/main-local.php
environments/dev/frontend/config/main-local.php

меняем блок:
$config = [
    'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => '',
        ],
    ],
];
на
$config = [];

В файлах
environments/prod/backend/config/main-local.php
environments\prod\frontend\config\main-local.php

меняем блок:
return [
    'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => '',
        ],
    ],
];
на
<?php
return [];
таким образом ключ сгенерируется автоматически при выполнении команды init в одном общем файле.



Так же в файле environments\index.php меняем два таких массива (для Development и Production)
'setCookieValidationKey' => [
 'backend/config/main-local.php',
 'frontend/config/main-local.php',
],
на 2 таких:
'setCookieValidationKey' => [
 'common/config/params-local.php',
],



2. Настройка конфигурационных файлов.
Теперь нужно подключить общие свойства из common\config\params-local.php в оба файла конфигурации. Для этого в frontend\config\main.php и backend\config\main.php в массив request (из массива components) добавить:
    'components' => [
        'request' => [
            'cookieValidationKey' => $params['cookieValidationKey'],
…
        ],

Далее в frontend\config\main.php и backend\config\main.php
сделать идентичными два следующих массива:
'user' => [
    'identityClass' => 'common\models\User',
    'enableAutoLogin' => true,
    'identityCookie' => ['name' => '_identity', 'httpOnly' => true, 'domain' => $params['cookieDomain']],
],
'session' => [
    'name' => 'advanced',
    'cookieParams' =>[
        'httpOnly' => true,
        'domain' => $params['cookieDomain'],
    ]
Тут, кроме того, что убрать в названиях компонентов приставки frantend или backend, так же добавляется поле 'domain' для обоих массивов (если на разных поддоменах).