Страница 1 из 1
Yii2 не работает enableAutoLogin
Добавлено: 2019.10.09, 12:22
myks1992@mail.ru
Всем привет! Что-то не могу понять почему не работает автологин? Вроде бы все верно делаю.
У меня есть свой класс
Identity реализующий интерфейс
IdentityInterface
Код: Выделить всё
class Identity implements IdentityInterface
{....}
Этот класс я подключаю в конфиге у компонента user
Код: Выделить всё
'user' => [
'identityClass' => Identity::class,
'enableAutoLogin' => true,
'loginUrl' => ['users/auth/auth/login'],
],
Далее использую так:
Код: Выделить всё
Yii::$app->user->login(new Identity($user), 3600);
Кука "_identity" не записывается и автологирование не происходит. Вроде бы сделал всё правильно. Пытался даже класс Identity наследовать от yii\web\User, хотя в этом нет никакого смысла. Куда копать? Какие ещё нюансы? Прошёлся по коду yii\web\User никаких дополнительных настроек не требуется, кроме как передавать в метод login() вторым параметром передавать не 0, а время жизни и в конфиге переопределять переменную
'enableAutoLogin' => true
Re: Yii2 не работает enableAutoLogin
Добавлено: 2019.10.09, 12:59
yiiliveext
А в сессии сохраняется айди после выхода?
Re: Yii2 не работает enableAutoLogin
Добавлено: 2019.10.09, 13:16
myks1992@mail.ru
yiiliveext писал(а): ↑2019.10.09, 12:59
А в сессии сохраняется айди после выхода?
В сессии да
Код: Выделить всё
array(3) { ["__flash"]=> array(0) { } ["__id"]=> int(2) ["__expire"]=> int(1570616895) }
Только не после выхода, а после входа. После выхода она удаляется....
Re: Yii2 не работает enableAutoLogin
Добавлено: 2019.10.09, 13:45
yiiliveext
myks1992@mail.ru писал(а): ↑2019.10.09, 13:16
Только не после выхода, а после входа. После выхода она удаляется....
Да, по умолчанию удаляется. А при входе в дебагере что в Set Cookie?
Re: Yii2 не работает enableAutoLogin
Добавлено: 2019.10.09, 17:57
myks1992@mail.ru
На
этой строке возвращает мой класс $identity и значение $duration = 2592000
Но вот что заметил параметр
$cookie возвращает такие данные:
Код: Выделить всё
$cookie = {yii\web\Cookie} [8]
name = "_csrf-web"
value = ""
domain = ""
expire = {int} 1
path = "/"
secure = false
httpOnly = true
sameSite = null
Хотя как минимум название должно быть из
Код: Выделить всё
public $identityCookie = ['name' => '_identity', 'httpOnly' => true];
То есть кука на создается на этапе array_merge() но данные передаются туда
Re: Yii2 не работает enableAutoLogin
Добавлено: 2019.10.09, 18:11
yiiliveext
myks1992@mail.ru писал(а): ↑2019.10.09, 17:57
На
этой строке возвращает мой класс $identity и значение $duration = 2592000
Но вот что заметил параметр
$cookie возвращает такие данные:
Код: Выделить всё
$cookie = {yii\web\Cookie} [8]
name = "_csrf-web"
value = ""
domain = ""
expire = {int} 1
path = "/"
secure = false
httpOnly = true
sameSite = null
Хотя как минимум название должно быть из
Код: Выделить всё
public $identityCookie = ['name' => '_identity', 'httpOnly' => true];
То есть кука на создается на этапе array_merge() но данные передаются туда
Посмотрите, что при том находится в $identity и $this->identityCookie. Вы же где-то задаете _csrf_web, найдите где
Re: Yii2 не работает enableAutoLogin
Добавлено: 2019.10.09, 18:16
myks1992@mail.ru
yiiliveext писал(а): ↑2019.10.09, 18:11
myks1992@mail.ru писал(а): ↑2019.10.09, 17:57
На
этой строке возвращает мой класс $identity и значение $duration = 2592000
Но вот что заметил параметр
$cookie возвращает такие данные:
Код: Выделить всё
$cookie = {yii\web\Cookie} [8]
name = "_csrf-web"
value = ""
domain = ""
expire = {int} 1
path = "/"
secure = false
httpOnly = true
sameSite = null
Хотя как минимум название должно быть из
Код: Выделить всё
public $identityCookie = ['name' => '_identity', 'httpOnly' => true];
То есть кука на создается на этапе array_merge() но данные передаются туда
Посмотрите, что при том находится в $identity и $this->identityCookie. Вы же где-то задаете _csrf_web, найдите где
Не поверите где нашел ошибку! В регистрации DI контейнера. Почему-то когда-то там было сделано вот такое:
Код: Выделить всё
$container = \Yii::$container;
$container->setSingleton('yii\web\Cookie', 'yii\web\Cookie');
В итоге куки создавались только один раз - при конфигурации приложения. Не знаю зачем так было сделано... Но это сбило с толку. Куки вроде бы работают другие, а вот пользовательские куки после загрузки приложения не создавались. Получается кука с названием name = "_csrf-web" создается при загрузке приложения. А остальные после.... Вот такая вот ерунда))
Re: Yii2 не работает enableAutoLogin
Добавлено: 2019.10.09, 18:26
yiiliveext
myks1992@mail.ru писал(а): ↑2019.10.09, 18:16
Не поверите где нашел ошибку! В регистрации DI контейнера. Почему-то когда-то там было сделано вот такое:
Код: Выделить всё
$container = \Yii::$container;
$container->setSingleton('yii\web\Cookie', 'yii\web\Cookie');
В итоге куки создавались только один раз - при конфигурации приложения. Не знаю зачем так было сделано... Но это сбило с толку. Куки вроде бы работают другие, а вот пользовательские куки после загрузки приложения не создавались. Получается кука с названием name = "_csrf-web" создается при загрузке приложения. А остальные после.... Вот такая вот ерунда))
"_csrf_web" указан в конфиге компонента request, а кука эта создается пригенерации csrfToken в том же Request. При каждом логине пользователя эта кука регенерируется.
Re: Yii2 не работает enableAutoLogin
Добавлено: 2019.10.09, 18:29
myks1992@mail.ru
yiiliveext писал(а): ↑2019.10.09, 18:26
myks1992@mail.ru писал(а): ↑2019.10.09, 18:16
Не поверите где нашел ошибку! В регистрации DI контейнера. Почему-то когда-то там было сделано вот такое:
Код: Выделить всё
$container = \Yii::$container;
$container->setSingleton('yii\web\Cookie', 'yii\web\Cookie');
В итоге куки создавались только один раз - при конфигурации приложения. Не знаю зачем так было сделано... Но это сбило с толку. Куки вроде бы работают другие, а вот пользовательские куки после загрузки приложения не создавались. Получается кука с названием name = "_csrf-web" создается при загрузке приложения. А остальные после.... Вот такая вот ерунда))
"_csrf_web" указан в конфиге компонента request, а кука эта создается пригенерации csrfToken в том же Request. При каждом логине пользователя эта кука регенерируется.
Да. Через дебаг это видно