Как разлогинить пользователя по id?
Здравствуйте. Делаю небольшой казалось бы банальный функционал, но один нюанс заставил меня хорошо подумать, и решения я так и не смог найти. Суть вопроса отражена в названии заметки. Нужно как-то разлогинить пользователя по иду. Зачем? Допустим у меня есть менеджер пароль, который я дал своему сотруднику. А через какое-то время поменял этого самого сотрудника, поменял пароль и дал новый пароль. А мой предыдущий сотрудник все еще авторизован в админке.
Мне старого сотрудника нужно принудительно разлогинить. Это можно сделать программно?
В ручном режиме я могу удалить пользователя, и создать нового
Либо в админке нажать «завершить все сеансы»
А программно? Надеялся что в modx_user_attributes будет достаточного удаления sessionid, но не получилось, пользователя не разлогинит.
Подобное тоже не получилось…
Мне старого сотрудника нужно принудительно разлогинить. Это можно сделать программно?
В ручном режиме я могу удалить пользователя, и создать нового
Либо в админке нажать «завершить все сеансы»
А программно? Надеялся что в modx_user_attributes будет достаточного удаления sessionid, но не получилось, пользователя не разлогинит.
Подобное тоже не получилось…
Комментарии: 14
Думается что так
$user->removeSessionContext('web');
но не факт) может только для текущего сработает…
А так не работает?
$user = $modx->getObject('modUser', $id);
$modx->user = $user;
$modx->user->removeSessionContext('mgr');
Нет, конечно не будет работать. Сам сейчас с пользователями мучаюсь, уже в голове бардак.
Если бы вы сначала поиском воспользовались, то не пришлось бы даже вопроса писать:
https://modx.pro/search?query=разлогинить+пользователя
https://modx.pro/search?query=разлогинить+пользователя
Единственный вроде бы удовлетворяющий ответ не подойдет. Я искал. Плагин проверяет проверяет ид пользователя и его авторизацию. Т.е если ид 10 и пользователь авторизован — выходим. Вроде бы то, но, При повторном входе пользователя опять выкинет. Тут речь идет о ситуации когда связкой логин\пароль воспользовался пользователь на одном пк, а потом на другом. На первом авторизацию нужно сбросить, а на втором пользователь дальше может беспрепятственно пользоваться.
Грубо говоря, я могу сделать так, что вас (и только вас) сейчас выкинет с modx.pro? Разумеется вы запросто можете еще раз авторизоваться по своей связке логин \ пароль.
Грубо говоря, я могу сделать так, что вас (и только вас) сейчас выкинет с modx.pro? Разумеется вы запросто можете еще раз авторизоваться по своей связке логин \ пароль.
Ну просто сохранить где-нибудь в базе информацию о том, что пользователя уже выкидывали и больше этого делать не нужно. Все «авторизации» хранятся в базе в таблице modx_sessions. Возможно, в ней можно найти конкретную сессию и просто удалить её.
$ssid = $user->get('sessionid');
if(!empty($ssid)) {
if($session = $this->modx->getObject('modSession',array('id' => $ssid))) {
$session->remove();
}
}
Без обид, но решение плохое. Просто подумай на тему, если чел заходит с разных браузеров. Или с работы и из дома.
Ну какие обиды, Сергей? ) Буду благодарен, если пояснишь свою мысль и предложишь своё решение.
Кстати, вопрос на самом деле достаточно часто возникает и актуален для любого более-менее серьёзного сайта.
Кстати, вопрос на самом деле достаточно часто возникает и актуален для любого более-менее серьёзного сайта.
Думаю Это тупиковая ветвь обсуждения. Потому как мысль изначально неверная. Для каждого отдельного сотрудника заводится отдельный пользователь с нужными правами, который при необходимости блокируется или удаляется. Вот и все.
Николай, глобально ты прав, но не совсем. Помимо описанной ТС проблемы, есть и другие случаи.
Например, пользователь может менять группу. А от группы зависит разное, например цена на сайте. Бывают таки ситуации, когда желательно бы принудительно завершить сессию.
Банально отвечать на однообразные вопросы «Я вот сейчас на сайте! Почему вы мне дали скидку, а я её не вижу?» — тяжко (то, что необходимость переавторизации везде прописана — «всем как всегда»). И вот тут-то как раз удобно при смене группы выбрасывать с морды заставляя перелогиниваться с новыми правами.
Например, пользователь может менять группу. А от группы зависит разное, например цена на сайте. Бывают таки ситуации, когда желательно бы принудительно завершить сессию.
Банально отвечать на однообразные вопросы «Я вот сейчас на сайте! Почему вы мне дали скидку, а я её не вижу?» — тяжко (то, что необходимость переавторизации везде прописана — «всем как всегда»). И вот тут-то как раз удобно при смене группы выбрасывать с морды заставляя перелогиниваться с новыми правами.
Вот так по аналогии.
Благодарю.
Путей для решения много!
Первый озвучили, проверять этого пользователя, он при любом раскладе обратится к php.
Второй это сессию удалить, она хранится либо в базе modx prefix_session либо в файлах сессиий php.
yadi.sk/i/DJM-iVZmFWnMiA — это id пользователя
Вообще «Завершить все сеансы» в помощь, все кто был разлогиняться, кому надо авторизуются. Полюбому на сайте не вечное хранение сессий так что каждую неделю этим занимаются
Первый озвучили, проверять этого пользователя, он при любом раскладе обратится к php.
Второй это сессию удалить, она хранится либо в базе modx prefix_session либо в файлах сессиий php.
yadi.sk/i/DJM-iVZmFWnMiA — это id пользователя
Вообще «Завершить все сеансы» в помощь, все кто был разлогиняться, кому надо авторизуются. Полюбому на сайте не вечное хранение сессий так что каждую неделю этим занимаются
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.