Как разлогинить пользователя?

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
mrchaos
Сообщения: 18
Зарегистрирован: 2011.03.31, 17:41

Как разлогинить пользователя?

Сообщение mrchaos »

У админа есть таблица с пользователями и надо приделать кнопку отключения. Ну понятно что status сменить с 1 на 0, но как выбросить из сессии уже залогиненого пользователя? Опрашивать постоянно базу на предмет активности профиля как то накладно. Подскажите как админу послать команду на выход другому профилю?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Как разлогинить пользователя?

Сообщение anton44eg »

а с какой целью? если оградить от какие-то действий, то лучше уж роль менять.
mrchaos
Сообщения: 18
Зарегистрирован: 2011.03.31, 17:41

Re: Как разлогинить пользователя?

Сообщение mrchaos »

Человек уволился к примеру, надо задисаблить его учётку конкретно. Роль сохраняется в сессии и при работе в зависимости от сессии пускает куда надо. Надо каким то образом дать команду на разлогон или удалить сессию.
Может есть какая глобальная переменная у yii в которой сохранять атрибут для отключенных, а они при работе будут проверять не пора ли разлогиниться и подтирать эту переменную?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Как разлогинить пользователя?

Сообщение anton44eg »

Я считаю, что нужно использовать RBAC и для уволенного менять роль.
mrchaos
Сообщения: 18
Зарегистрирован: 2011.03.31, 17:41

Re: Как разлогинить пользователя?

Сообщение mrchaos »

Придётся переписывать много кода под RBAC. Но если он при каждом обращении к сайту дёргает базу с ролями то это не выход. Проверять роль в базе или статус подключения я и сам могу дописыванием одной строки кода. Не хотелось бы вообще к базе обращаться что бы выяснить роль
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Как разлогинить пользователя?

Сообщение anton44eg »

Так можно ведь кешировать.
mrchaos
Сообщения: 18
Зарегистрирован: 2011.03.31, 17:41

Re: Как разлогинить пользователя?

Сообщение mrchaos »

Я люблю частенько чистить кэш. Хранить там не вариант )
ПС. Мысль понял. Я сначала хотел в кэше хранить переменную, но понял что надо хранить запрос к базе и это выход. Спасибо за наводку
kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Re: Как разлогинить пользователя?

Сообщение kutsanov »

anton44eg писал(а):Так можно ведь кешировать.
как часто тут любят пустословить. Вместо ответа на вопрос чушь начал писать.
Вопрос конкретный. Если ответа не знаешь, нафига эфир засирать бредовыми какашками.
--
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как разлогинить пользователя?

Сообщение ElisDN »

kutsanov писал(а):как часто тут любят пустословить. Вместо ответа на вопрос чушь начал писать.
Вопрос конкретный. Если ответа не знаешь, нафига эфир засирать бредовыми какашками.
А это ещё что за бред?
kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Re: Как разлогинить пользователя?

Сообщение kutsanov »

ElisDN писал(а):
kutsanov писал(а):как часто тут любят пустословить. Вместо ответа на вопрос чушь начал писать.
Вопрос конкретный. Если ответа не знаешь, нафига эфир засирать бредовыми какашками.
А это ещё что за бред?
да реально бесят такие "умники".
Человеку помощь нужна, а он демагогию разводит.
Причем бредовую идею предлагает.
Так что это адекватная реакция на чушь!
kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Re: Как разлогинить пользователя?

Сообщение kutsanov »

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

                    session_id($session_id);
                    session_start();
                    session_destroy();
                    session_commit(); 
как вариант!
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как разлогинить пользователя?

Сообщение ElisDN »

kutsanov писал(а):да реально бесят такие "умники".
Человеку помощь нужна, а он демагогию разводит.
Причем бредовую идею предлагает.
Так что это адекватная реакция на чушь!
А чем Вам не понравилось встроенное в DBManager кеширование запросов к RBAC-таблицам?
kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Re: Как разлогинить пользователя?

Сообщение kutsanov »

ElisDN писал(а):
kutsanov писал(а):да реально бесят такие "умники".
Человеку помощь нужна, а он демагогию разводит.
Причем бредовую идею предлагает.
Так что это адекватная реакция на чушь!
А чем Вам не понравилось встроенное в DBManager кеширование запросов к RBAC-таблицам?
Изначальный вопрос почитай!
kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Re: Как разлогинить пользователя?

Сообщение kutsanov »

ElisDN писал(а):
kutsanov писал(а):да реально бесят такие "умники".
Человеку помощь нужна, а он демагогию разводит.
Причем бредовую идею предлагает.
Так что это адекватная реакция на чушь!
А чем Вам не понравилось встроенное в DBManager кеширование запросов к RBAC-таблицам?
Можно также развести демагогию, о том как правильнее использовать роль или убить сессию, и я кучу причин найду в пользу второго, в данном случае. Но вопрос даже не в этом. не раз уже тут встречаются чудаки (на букву М), которые вместо помощи ублажают свое ЭГО, когда сами из себя мало что представляют. Вот и ставлю на место, потому как задолбали своим спамом.
еще раз, ответ на вопрос, а то уже из-за чудаков и их защитников, суть беседы потерялась.
Стобы принудительно разлогинеть пользователя, я бы сделал так:

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

session_id($session_id);
session_start();
session_destroy();
session_commit();  
$session_id - ID сессии
соответственно ID нужно прописывать где-то
я у себя веду простую табличку с полями типа USER_ID, SESSION_ID
и если так будете делать, не забудьте что записей может быть несколько (с разных устройств как вариант).
И еще, вся эта фигня работает, если отключить автологирование (иначе Yii создает сессию принудительно), вроде как. Но это не точно, проверяйте!:)
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как разлогинить пользователя?

Сообщение ElisDN »

kutsanov писал(а):и если так будете делать, не забудьте что записей может быть несколько (с разных устройств как вариант).
И еще, вся эта фигня работает, если отключить автологирование (иначе Yii создает сессию принудительно), вроде как. Но это не точно, проверяйте!:)
Уууу... накостылили фигни. А я угадаю эту мелодию с пяти нот:

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

public static function findIdentity($id)
{
    return self::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]);
}
И всё.
kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Re: Как разлогинить пользователя?

Сообщение kutsanov »

ElisDN писал(а):
kutsanov писал(а):и если так будете делать, не забудьте что записей может быть несколько (с разных устройств как вариант).
И еще, вся эта фигня работает, если отключить автологирование (иначе Yii создает сессию принудительно), вроде как. Но это не точно, проверяйте!:)
Уууу... накостылили фигни. А я угадаю эту мелодию с пяти нот:

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

public static function findIdentity($id)
{
    return self::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]);
} 
И всё.
согласен! Ваше смотрится красивее! Но давайте к практике.
Я исхожу, что Статус - определяет удален пользователь или нет.
Авторизация через корпоративную почту, которая выдается админами, например manager1@firm.ru, manager2@firm.ru, manager3@firm.ru ...
Ситуация уволили сотрудника - manager1@firm.ru. На его место пришел другой. Нужно чтобы новый имел доступ ко всему что имел прежний (включая историю). Чтобы старый не зашел меняем пароль. Но если не разлогинеть принудительно старого, сам он не разогнется.
Но в целом Ваш подход правильный, если не смотреть на вопрос темы!:)
kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Re: Как разлогинить пользователя?

Сообщение kutsanov »

или еще вариант
пришли из органов, сгребли некоторый компы, на которых автоматом были присочинены сотрудники.
Чтобы не зашли "чужие", нужно принудительно выкинуть юзеров.
Хотя в данном случае лучше тупо чистить вся папку с сессиями, а может и сервера:):):)

вообщем все то не в тему
думаю вопрос закрыт
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как разлогинить пользователя?

Сообщение ElisDN »

kutsanov писал(а):Ситуация уволили сотрудника... На его место пришел другой. Нужно чтобы новый имел доступ ко всему что имел прежний (включая историю). Чтобы старый не зашел меняем пароль. Но если не разлогинеть принудительно старого, сам он не разогнется.
Ну тогда включаем хранение сессий в базе, в таблицу добавляем поле user_id и, собственно, туда вписываем текущего пользователя:

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

'session' => [
    'class' => 'yii\web\DbSession',
    'writeCallback' => function () {
        return ['user_id' => Yii::app()->user->id],
    },
], 
А в контроллере при смене пароля администратором всё чистим:

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

Yii::$app->db->createCommand()
    ->delete(Yii::$app->session->sessionTable, ['user_id' => $id])
    ->execute(); 
и перезапускаем $user->generateAuthKey() для инвалидации Cookies.

Теперь точно всё :)
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Как разлогинить пользователя?

Сообщение samdark »

Забавно, но только недавно сделал issue с планом написать рецепт для кукбука: https://github.com/samdark/yii2-cookbook/issues/92. Ещё забавнее, что SilverFire чуть ранее ответил на этот же вопрос на StackOverflow.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как разлогинить пользователя?

Сообщение ElisDN »

Да, забавно. И на вебинаре мы упоминали про https://github.com/yiisoft/yii2/issues/9718.
Ответить