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

Здравствуйте. Делаю небольшой казалось бы банальный функционал, но один нюанс заставил меня хорошо подумать, и решения я так и не смог найти. Суть вопроса отражена в названии заметки. Нужно как-то разлогинить пользователя по иду. Зачем? Допустим у меня есть менеджер пароль, который я дал своему сотруднику. А через какое-то время поменял этого самого сотрудника, поменял пароль и дал новый пароль. А мой предыдущий сотрудник все еще авторизован в админке.
Мне старого сотрудника нужно принудительно разлогинить. Это можно сделать программно?

В ручном режиме я могу удалить пользователя, и создать нового
Либо в админке нажать «завершить все сеансы»

А программно? Надеялся что в modx_user_attributes будет достаточного удаления sessionid, но не получилось, пользователя не разлогинит.
Подобное тоже не получилось…
Николай
19 февраля 2019, 09:39
modx.pro
1 879
0

Комментарии: 14

Наумов Алексей
19 февраля 2019, 10:24
0
Думается что так
$user->removeSessionContext('web');
но не факт) может только для текущего сработает…
    dopeless
    19 февраля 2019, 10:59
    0
    А так не работает?

    $user = $modx->getObject('modUser', $id);
    $modx->user = $user;
    $modx->user->removeSessionContext('mgr');
      dopeless
      19 февраля 2019, 11:32
      0
      Нет, конечно не будет работать. Сам сейчас с пользователями мучаюсь, уже в голове бардак.
      Илья Уткин
      19 февраля 2019, 12:32
      0
      Если бы вы сначала поиском воспользовались, то не пришлось бы даже вопроса писать:
      https://modx.pro/search?query=разлогинить+пользователя
        Николай
        19 февраля 2019, 12:42
        0
        Единственный вроде бы удовлетворяющий ответ не подойдет. Я искал. Плагин проверяет проверяет ид пользователя и его авторизацию. Т.е если ид 10 и пользователь авторизован — выходим. Вроде бы то, но, При повторном входе пользователя опять выкинет. Тут речь идет о ситуации когда связкой логин\пароль воспользовался пользователь на одном пк, а потом на другом. На первом авторизацию нужно сбросить, а на втором пользователь дальше может беспрепятственно пользоваться.

        Грубо говоря, я могу сделать так, что вас (и только вас) сейчас выкинет с modx.pro? Разумеется вы запросто можете еще раз авторизоваться по своей связке логин \ пароль.
          Илья Уткин
          19 февраля 2019, 12:47
          +1
          Ну просто сохранить где-нибудь в базе информацию о том, что пользователя уже выкидывали и больше этого делать не нужно. Все «авторизации» хранятся в базе в таблице modx_sessions. Возможно, в ней можно найти конкретную сессию и просто удалить её.
            Алексей Шумаев
            19 февраля 2019, 16:56
            +1
            $ssid = $user->get('sessionid');
                if(!empty($ssid)) {
                    if($session = $this->modx->getObject('modSession',array('id' => $ssid))) {
                        $session->remove();
                    }
            }
              Сергей Шлоков
              19 февраля 2019, 18:26
              0
              Без обид, но решение плохое. Просто подумай на тему, если чел заходит с разных браузеров. Или с работы и из дома.
                Алексей Шумаев
                19 февраля 2019, 19:44
                0
                Ну какие обиды, Сергей? ) Буду благодарен, если пояснишь свою мысль и предложишь своё решение.
                Кстати, вопрос на самом деле достаточно часто возникает и актуален для любого более-менее серьёзного сайта.
                  Николай Савин
                  19 февраля 2019, 20:02
                  0
                  Думаю Это тупиковая ветвь обсуждения. Потому как мысль изначально неверная. Для каждого отдельного сотрудника заводится отдельный пользователь с нужными правами, который при необходимости блокируется или удаляется. Вот и все.
                    Алексей Шумаев
                    19 февраля 2019, 20:12
                    0
                    Николай, глобально ты прав, но не совсем. Помимо описанной ТС проблемы, есть и другие случаи.
                    Например, пользователь может менять группу. А от группы зависит разное, например цена на сайте. Бывают таки ситуации, когда желательно бы принудительно завершить сессию.
                    Банально отвечать на однообразные вопросы «Я вот сейчас на сайте! Почему вы мне дали скидку, а я её не вижу?» — тяжко (то, что необходимость переавторизации везде прописана — «всем как всегда»). И вот тут-то как раз удобно при смене группы выбрасывать с морды заставляя перелогиниваться с новыми правами.
                    Сергей Шлоков
                    19 февраля 2019, 21:14
                    +1
                    Вот так по аналогии.
          Андрей Степаненко
          19 февраля 2019, 20:19
          +1
          Путей для решения много!
          Первый озвучили, проверять этого пользователя, он при любом раскладе обратится к php.
          Второй это сессию удалить, она хранится либо в базе modx prefix_session либо в файлах сессиий php.
          yadi.sk/i/DJM-iVZmFWnMiA — это id пользователя

          Вообще «Завершить все сеансы» в помощь, все кто был разлогиняться, кому надо авторизуются. Полюбому на сайте не вечное хранение сессий так что каждую неделю этим занимаются
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            14