Страница 1 из 1
Смена пароля не чего не дает.
Добавлено: 2019.05.16, 19:49
webplus
Здравствуйте.
Делаю авторизацию на сайте, захожу под паролем в браузере хром и еще открываю вкладку в режиме инкогнито и там под этим юзером авторизируюсь. Потом в инкогнито вкладке меняю пароль. Потом обновляю первую вкладку и авторизация так и осталась, а должна была слететь.
В базе данных поле authKey меняется при смене пароля.
Т.е. если кто то узнал мой пароль, и вошел с другого компа, потом я на своем компе пароль сменил, то у него авторизация так и останется. Смена пароль с аускэй не чего не дает.
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.17, 09:26
SiZE
Авторизация на куках?
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.
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.17, 11:24
webplus
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 с двух браузерах и сменить в одном пароль, так в другом браузере авторизация так и осталась.
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.17, 12:42
maleks
webplus писал(а): ↑2019.05.17, 11:24
Может надо добавить где то в rules validateAuthKey , так почему изначально в дефолтную модель User оно не добавлено!
Эта проверка имеется
тут, пологируйте метод этот, что туда попадает
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.17, 17:53
ElisDN
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.17, 18:09
webplus
Прочитал.
У меня ситуация такая. Достался мне проект на доработку,, до этого им другой прогер занимался, и он авторизировался как админ и сохранил сам куки. Теперь я проектом занимаюсь, я сменил пароль, но этот первый прогер по старому кокеесу успешно авторизируется. Я менял authkey но толку нет.
Авторизация пропадает когда браузер закрыть, но если потом открыть firefox с расширением edit cockies и вставить куки то можно авторизироваться успешно.
Как в laravel фреймворке с этим дела, может кто знает?
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.17, 21:29
webplus
Провел эксперимент!
Взял для теста сам сайт
https://www.yiiframework.ru - потому что он реализован на yii2
Авторизировался на нем в браузере хром, потом зашел в настройки браузера и скопировал кукки в текстовый файл.
Потом авторизировался через браузер firefox.
Потом в хроме сменил пароль в аккаунте.
Потом обновил firefox - но авторизация так и осталась.
Потом ушел на два часа, вернувшись открыл firefox и авторизация так и была, я думал может время ее истечет.
Потом для теста открыл в firefox приватный режим и зашел на сайта, и через расширение edit cockie ввел тот старый (со старым authKey - потому что он в базе поменялся когда я пароль менял) до изменения пароля с файла ввел кукки. И вошел успешно в личный кабинет.
Мне yii2 нравится. Но авторизация меня очень расстраивает и пугает!
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.18, 11:44
webplus
вот статья 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 дал мне хоть короткий ответ.
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.18, 12:45
webplus
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() и разлогирование так и не происходит!
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.18, 15:53
maleks
webplus писал(а): ↑2019.05.18, 11:44
Мне бы хотелось чтобы кто то из разработчиков yii2 дал мне хоть короткий ответ.
Почему вы не хотите сами подебажить и выяснить что там за отличная от ожидаемой логика или может баг это?
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.18, 21:03
webplus
maleks писал(а): ↑2019.05.18, 15:53
Почему вы не хотите сами подебажить и выяснить что там за отличная от ожидаемой логика или может баг это?
Исправил!
Создал компонент
https://github.com/borysenko/yii2-user-component - устанавливается через composer.
Оказывается валидация auth_key не где не запускалась!
Протестируйте кому не лень. В двух разных браузерах залогиньтесь и в одном смените пароль с auth_key, разлогинет сразу в обеих при смене auth_key.
Может пригодится кому то!
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.19, 16:25
SiZE
Ты не внимательный. Я в самом начале спросил "авторизация на куках?" У тебя авторизация не на куках, поэтому у тебя не вызывается validateAuthKey().
Там разобраться что к чему раз плюнуть
https://github.com/yiisoft/yii2/blob/ma ... b/User.php
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.19, 17:01
webplus
SiZE писал(а): ↑2019.05.19, 16:25
Ты не внимательный. Я в самом начале спросил "авторизация на куках?" У тебя авторизация не на куках, поэтому у тебя не вызывается validateAuthKey().
Весь инет перерыл чтобы понять что в конфиге указать , чтобы авторизация на куках была, так и не нашел. Приведите пример какое свойства в конфиге прописать чтобы на куках была? Спасибо.
Наверно enableSession поставить false.
И какой способ более безопасный с сессиями или куками?
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.19, 18:52
webplus
Проверил отключить сессии
так после ввода пароля не чего не авторизируется!
Напиши
SiZE как ты отключал сессию и включал куки?
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.20, 05:48
maleks
webplus писал(а): ↑2019.05.19, 18:52
как включал куки?
enableAutoLogin = true
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.20, 09:55
webplus
maleks писал(а): ↑2019.05.20, 05:48
enableAutoLogin = true
Этот параметр у меня и был включен. При этом параметре валидация auth_key запускается только один раз (при запуске браузера и переходе на сайт).
Если этот параметр включен и изменить auth_key то при открытии браузера авторизацию сбросит. Но если два разных браузера были открыты и авторизованы, то смена auth_key не чего не даст, т.е. при обновлении страницы любого браузера, валидация не сработает. Только после закрытия браузера и открытия.
Немного переделал свое расширение
https://github.com/borysenko/yii2-user-component вынес запуск валидации в init(). И это решает данную проблему. Достаточно сменить auth_key и сразу разлогиневает (без закрытия и открытия браузера) - а это как и должно быть
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.20, 11:08
samdark
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.20, 11:18
webplus
Ну так я при смене пароле вызываю $user->generateAuthKey() но разлогирования не происходит.
Разлогирование происходит если браузер закрыть, а потом открыть.
Если например под двумя разными браузерами быть авторизованными , то потом в одном браузере сменить AuthKey (это может быть как вы пишите когда пароль меняешь вызывать $user->generateAuthKey()), то во втором браузере не разлогинет, пока его не закроешь. Получается что еще и во втором браузере можно менять пароль.
Свое расширение, что я сделал проверяет AuthKey при каждом обновлении страницы и сразу разлогиневает если AuthKey не валидный. Т.е. в двух браузерах не получится быть авторизованным если в одном поменять AuthKey
Re: Смена пароля не чего не дает.
Добавлено: 2019.05.20, 11:40
webplus
Вот пишет 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