Смена пароля не чего не дает.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
webplus
Сообщения: 244
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Смена пароля не чего не дает.

Сообщение webplus » 2019.05.16, 19:49

Здравствуйте.
Делаю авторизацию на сайте, захожу под паролем в браузере хром и еще открываю вкладку в режиме инкогнито и там под этим юзером авторизируюсь. Потом в инкогнито вкладке меняю пароль. Потом обновляю первую вкладку и авторизация так и осталась, а должна была слететь.
В базе данных поле authKey меняется при смене пароля.
Т.е. если кто то узнал мой пароль, и вошел с другого компа, потом я на своем компе пароль сменил, то у него авторизация так и останется. Смена пароль с аускэй не чего не дает.

Аватара пользователя
SiZE
Сообщения: 2690
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Смена пароля не чего не дает.

Сообщение SiZE » 2019.05.17, 09:26

Авторизация на куках?

getAuthKey(): it returns a key used to verify cookie-based login. The key is stored in the login cookie and will be later compared with the server-side version to make sure the login cookie is valid.
в поиске работы

Аватара пользователя
webplus
Сообщения: 244
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Re: Смена пароля не чего не дает.

Сообщение webplus » 2019.05.17, 11:24

SiZE писал(а):
2019.05.17, 09:26
Авторизация на куках?

getAuthKey():
в модели user все это есть:

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

    public function getAuthKey()
    {
        return $this->auth_key;
    }

    /**
     * {@inheritdoc}
     */
    public function validateAuthKey($authKey)
    {
        return $this->getAuthKey() === $authKey;
    }
Но при смене пароля auth_key меняется, но при этом во втором браузере авторизация не слетает, а остается!
Может надо добавить где то в rules validateAuthKey , так почему изначально в дефолтную модель User оно не добавлено!

Попробовал даже вариант с хранением сессий в базе yii\web\DbSession но все тоже, авторизация на всех компах, хоть и сменил пароль.

Я даже для интереса попробовал войти в личный кабинет сайта https://yiiframework.ru с двух браузерах и сменить в одном пароль, так в другом браузере авторизация так и осталась.

Аватара пользователя
maleks
Сообщения: 1721
Зарегистрирован: 2012.12.26, 12:56

Re: Смена пароля не чего не дает.

Сообщение maleks » 2019.05.17, 12:42

webplus писал(а):
2019.05.17, 11:24
Может надо добавить где то в rules validateAuthKey , так почему изначально в дефолтную модель User оно не добавлено!
Эта проверка имеется тут, пологируйте метод этот, что туда попадает


Аватара пользователя
webplus
Сообщения: 244
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Re: Смена пароля не чего не дает.

Сообщение webplus » 2019.05.17, 18:09

ElisDN писал(а):
2019.05.17, 17:53
viewtopic.php?f=19&t=20828&p=237106#p237086
Прочитал.
У меня ситуация такая. Достался мне проект на доработку,, до этого им другой прогер занимался, и он авторизировался как админ и сохранил сам куки. Теперь я проектом занимаюсь, я сменил пароль, но этот первый прогер по старому кокеесу успешно авторизируется. Я менял authkey но толку нет.
Авторизация пропадает когда браузер закрыть, но если потом открыть firefox с расширением edit cockies и вставить куки то можно авторизироваться успешно.

Как в laravel фреймворке с этим дела, может кто знает?

Аватара пользователя
webplus
Сообщения: 244
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Re: Смена пароля не чего не дает.

Сообщение webplus » 2019.05.17, 21:29

Провел эксперимент!
Взял для теста сам сайт https://www.yiiframework.ru - потому что он реализован на yii2
Авторизировался на нем в браузере хром, потом зашел в настройки браузера и скопировал кукки в текстовый файл.
Потом авторизировался через браузер firefox.
Потом в хроме сменил пароль в аккаунте.
Потом обновил firefox - но авторизация так и осталась.
Потом ушел на два часа, вернувшись открыл firefox и авторизация так и была, я думал может время ее истечет.
Потом для теста открыл в firefox приватный режим и зашел на сайта, и через расширение edit cockie ввел тот старый (со старым authKey - потому что он в базе поменялся когда я пароль менял) до изменения пароля с файла ввел кукки. И вошел успешно в личный кабинет.

Мне yii2 нравится. Но авторизация меня очень расстраивает и пугает!

Аватара пользователя
webplus
Сообщения: 244
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Re: Смена пароля не чего не дает.

Сообщение webplus » 2019.05.18, 11:44

вот статья Alexander Makarov - (Authentication) - https://github.com/yiisoft/yii2/blob/ma ... ication.md
в ней он приводит пример:

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

class User extends ActiveRecord implements IdentityInterface
{
    ......

    public function beforeSave($insert)
    {
        if (parent::beforeSave($insert)) {
            if ($this->isNewRecord) {
                $this->auth_key = \Yii::$app->security->generateRandomString();
            }
            return true;
        }
        return false;
    }
}
По идеи как только сменился auth_key то сразу должно разлогинеть, потому что в кукки остается старый auth_key , а в базе мы поменяли его и тут же при обновлении страницы должно сработать validateAuthKey($authKey) и увидеть что в кукки auth_key не соответствует тем что в базе у юзера.
Мне бы хотелось чтобы кто то из разработчиков yii2 дал мне хоть короткий ответ.

Аватара пользователя
webplus
Сообщения: 244
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Re: Смена пароля не чего не дает.

Сообщение webplus » 2019.05.18, 12:45

webplus писал(а):
2019.05.18, 11:44

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

    public function beforeSave($insert)
    {
        if (parent::beforeSave($insert)) {
            if ($this->isNewRecord) {
                $this->auth_key = \Yii::$app->security->generateRandomString();
            }
            return true;
        }
        return false;
    }
в этом примере только при создании (isNewRecord) создается auth_key.
Но в своем проекте я при изменении пароля вызываю из модели User - generateAuthKey() и разлогирование так и не происходит!

Аватара пользователя
maleks
Сообщения: 1721
Зарегистрирован: 2012.12.26, 12:56

Re: Смена пароля не чего не дает.

Сообщение maleks » 2019.05.18, 15:53

webplus писал(а):
2019.05.18, 11:44
Мне бы хотелось чтобы кто то из разработчиков yii2 дал мне хоть короткий ответ.
Почему вы не хотите сами подебажить и выяснить что там за отличная от ожидаемой логика или может баг это?

Аватара пользователя
webplus
Сообщения: 244
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Re: Смена пароля не чего не дает.

Сообщение webplus » 2019.05.18, 21:03

maleks писал(а):
2019.05.18, 15:53
Почему вы не хотите сами подебажить и выяснить что там за отличная от ожидаемой логика или может баг это?
Исправил!
Создал компонент https://github.com/borysenko/yii2-user-component - устанавливается через composer.

Оказывается валидация auth_key не где не запускалась!

Протестируйте кому не лень. В двух разных браузерах залогиньтесь и в одном смените пароль с auth_key, разлогинет сразу в обеих при смене auth_key.

Может пригодится кому то!

Аватара пользователя
SiZE
Сообщения: 2690
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Смена пароля не чего не дает.

Сообщение SiZE » 2019.05.19, 16:25

Ты не внимательный. Я в самом начале спросил "авторизация на куках?" У тебя авторизация не на куках, поэтому у тебя не вызывается validateAuthKey().

Там разобраться что к чему раз плюнуть https://github.com/yiisoft/yii2/blob/ma ... b/User.php
в поиске работы

Аватара пользователя
webplus
Сообщения: 244
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Re: Смена пароля не чего не дает.

Сообщение webplus » 2019.05.19, 17:01

SiZE писал(а):
2019.05.19, 16:25
Ты не внимательный. Я в самом начале спросил "авторизация на куках?" У тебя авторизация не на куках, поэтому у тебя не вызывается validateAuthKey().
Весь инет перерыл чтобы понять что в конфиге указать , чтобы авторизация на куках была, так и не нашел. Приведите пример какое свойства в конфиге прописать чтобы на куках была? Спасибо.
Наверно enableSession поставить false.
И какой способ более безопасный с сессиями или куками?

Аватара пользователя
webplus
Сообщения: 244
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Re: Смена пароля не чего не дает.

Сообщение webplus » 2019.05.19, 18:52

Проверил отключить сессии

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

'enableSession' => false
так после ввода пароля не чего не авторизируется!
Напиши SiZE как ты отключал сессию и включал куки?

Аватара пользователя
maleks
Сообщения: 1721
Зарегистрирован: 2012.12.26, 12:56

Re: Смена пароля не чего не дает.

Сообщение maleks » 2019.05.20, 05:48

webplus писал(а):
2019.05.19, 18:52
как включал куки?
enableAutoLogin = true

Аватара пользователя
webplus
Сообщения: 244
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Re: Смена пароля не чего не дает.

Сообщение webplus » 2019.05.20, 09:55

maleks писал(а):
2019.05.20, 05:48
enableAutoLogin = true
Этот параметр у меня и был включен. При этом параметре валидация auth_key запускается только один раз (при запуске браузера и переходе на сайт).
Если этот параметр включен и изменить auth_key то при открытии браузера авторизацию сбросит. Но если два разных браузера были открыты и авторизованы, то смена auth_key не чего не даст, т.е. при обновлении страницы любого браузера, валидация не сработает. Только после закрытия браузера и открытия.
Немного переделал свое расширение https://github.com/borysenko/yii2-user-component вынес запуск валидации в init(). И это решает данную проблему. Достаточно сменить auth_key и сразу разлогиневает (без закрытия и открытия браузера) - а это как и должно быть


Аватара пользователя
webplus
Сообщения: 244
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Re: Смена пароля не чего не дает.

Сообщение webplus » 2019.05.20, 11:18

samdark писал(а):
2019.05.20, 11:08
https://github.com/yiisoft/yii2/issues/9718
Ну так я при смене пароле вызываю $user->generateAuthKey() но разлогирования не происходит.
Разлогирование происходит если браузер закрыть, а потом открыть.
Если например под двумя разными браузерами быть авторизованными , то потом в одном браузере сменить AuthKey (это может быть как вы пишите когда пароль меняешь вызывать $user->generateAuthKey()), то во втором браузере не разлогинет, пока его не закроешь. Получается что еще и во втором браузере можно менять пароль.
Свое расширение, что я сделал проверяет AuthKey при каждом обновлении страницы и сразу разлогиневает если AuthKey не валидный. Т.е. в двух браузерах не получится быть авторизованным если в одном поменять AuthKey

Аватара пользователя
webplus
Сообщения: 244
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Re: Смена пароля не чего не дает.

Сообщение webplus » 2019.05.20, 11:40

samdark писал(а):
2019.05.20, 11:08
https://github.com/yiisoft/yii2/issues/9718
Вот пишет klimov-paul :
Currently authenticated user simply unable to provide 'auth key' value - he does not have a source for it.
вот перевод: В настоящее время аутентифицированный пользователь просто не может предоставить значение ключа авторизации - у него нет источника для него.

Но может с того времени что то в браузерах изменилось и браузер дает предоставления значения куки сайту. Но ведь изменения что я сделал работают. Вот что я сделал:

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

class User extends \yii\web\User
{
    public function init()
    {
        $this->enableAutoLogin = true;
        $this->getIdentityAndDurationFromCookie();
        parent::init();
    }
 
 }   
изменил метод getIdentityAndDurationFromCookie чтобы сессия удалялась

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

elseif (!$identity->validateAuthKey($authKey)) {
                    if(Yii::$app->session->has($this->idParam)) {
                        Yii::$app->session->remove($this->idParam);
                        $this->removeIdentityCookie();
                    }
                }
В общем вот код https://github.com/borysenko/yii2-user- ... s/User.php

Ответить