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

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

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

Сообщение myks1992@mail.ru » 2019.10.09, 12:22

Всем привет! Что-то не могу понять почему не работает автологин? Вроде бы все верно делаю.

У меня есть свой класс 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
Сообщения: 867
Зарегистрирован: 2019.08.13, 01:49

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

Сообщение yiiliveext » 2019.10.09, 12:59

А в сессии сохраняется айди после выхода?

myks1992@mail.ru
Сообщения: 137
Зарегистрирован: 2017.11.15, 23:54

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

Сообщение myks1992@mail.ru » 2019.10.09, 13:16

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

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

array(3) { ["__flash"]=> array(0) { } ["__id"]=> int(2) ["__expire"]=> int(1570616895) }
Только не после выхода, а после входа. После выхода она удаляется....

yiiliveext
Сообщения: 867
Зарегистрирован: 2019.08.13, 01:49

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

Сообщение yiiliveext » 2019.10.09, 13:45

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

myks1992@mail.ru
Сообщения: 137
Зарегистрирован: 2017.11.15, 23:54

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

Сообщение 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() но данные передаются туда

yiiliveext
Сообщения: 867
Зарегистрирован: 2019.08.13, 01:49

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

Сообщение 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, найдите где

myks1992@mail.ru
Сообщения: 137
Зарегистрирован: 2017.11.15, 23:54

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

Сообщение myks1992@mail.ru » 2019.10.09, 18:16

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

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

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

myks1992@mail.ru
Сообщения: 137
Зарегистрирован: 2017.11.15, 23:54

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

Сообщение myks1992@mail.ru » 2019.10.09, 18:29

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

Ответить