Yii2 не работает enableAutoLogin

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
myks1992@mail.ru
Сообщения: 147
Зарегистрирован: 2017.11.15, 23:54

Yii2 не работает enableAutoLogin

Сообщение 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
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Yii2 не работает enableAutoLogin

Сообщение yiiliveext »

А в сессии сохраняется айди после выхода?
myks1992@mail.ru
Сообщения: 147
Зарегистрирован: 2017.11.15, 23:54

Re: Yii2 не работает enableAutoLogin

Сообщение myks1992@mail.ru »

yiiliveext писал(а): 2019.10.09, 12:59 А в сессии сохраняется айди после выхода?
В сессии да

Код: Выделить всё

array(3) { ["__flash"]=> array(0) { } ["__id"]=> int(2) ["__expire"]=> int(1570616895) }
Только не после выхода, а после входа. После выхода она удаляется....
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Yii2 не работает enableAutoLogin

Сообщение yiiliveext »

myks1992@mail.ru писал(а): 2019.10.09, 13:16 Только не после выхода, а после входа. После выхода она удаляется....
Да, по умолчанию удаляется. А при входе в дебагере что в Set Cookie?
myks1992@mail.ru
Сообщения: 147
Зарегистрирован: 2017.11.15, 23:54

Re: Yii2 не работает enableAutoLogin

Сообщение 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() но данные передаются туда
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Yii2 не работает enableAutoLogin

Сообщение 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, найдите где
myks1992@mail.ru
Сообщения: 147
Зарегистрирован: 2017.11.15, 23:54

Re: Yii2 не работает enableAutoLogin

Сообщение 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" создается при загрузке приложения. А остальные после.... Вот такая вот ерунда))
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Yii2 не работает enableAutoLogin

Сообщение 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. При каждом логине пользователя эта кука регенерируется.
myks1992@mail.ru
Сообщения: 147
Зарегистрирован: 2017.11.15, 23:54

Re: Yii2 не работает enableAutoLogin

Сообщение 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. При каждом логине пользователя эта кука регенерируется.
Да. Через дебаг это видно
Ответить