Управление активными сессиями учетной записи

Один из частых вопросов:

Можно ли в системе посмотреть пользователей, которые залогинены на данный момент на экземпляре?

Ответ - да.

Существует таблица user_token.
В ней хранятся все токены каждого из пользователей.
Один токен - одна активная сессия в браузере у текущего пользователя.

Также есть колонка Impersonator - указывающая на сессию имперсонации.

Для того, чтобы выкинуть пользователя из системы на всех устройствах - необходимо удалить все записи токенов пользователя.

3 лайка

@Maxim_Lovchagov
а если в этой таблице у пользователя есть несколько строчек?
на одном из стендов, например, есть пользователь у которого в системе ~900 выданных токенов и достаточно других пользователей, у кого их более 10.

1 лайк

@Maxim_Lovchagov
Думаю, было бы полезно немного раскрыть тему.

Как правильно интерпретировать значения поля Expires at.
Или, например, почему за текущий день для моей УЗ нет записи, а только за предыдущий. Т.е. получается не для каждой активной сессии

1 лайк

Expires at. - это дата истечения времени жизни токена в формате timestamp.

Расшифровать можно с помощью серверного скрипта вот так например:

const current = new SimpleRecord(‘user_token’);
current.get(sys_id);
const duration = new SimpleDuration(current.expired_at);
ss.info(duration.getValue())

Токен выдается при авторизации и удаляется при Logout либо при истечении срока.
Вполне логично что запись токена может быть не за текущий день

Насчёт ~900 выданных токенов, очень странно - вероятно есть/был какой-то дефект, надо поискать. Но один токен для обычного пользователя- это одна залогиненная запись в одном браузере грубо говоря.