Jump to main content Jump to doc navigation

Событие: OnWebLogout

Вызывается после того, как процессор выхода снял session contexts пользователя во фронтенд-контексте (не mgr). Плагины не меняют уже произошедший выход.

  • Служба: 3 - Web Access Service Events
  • Group: Security

Параметры события

Имя Описание
& user Ссылка на объект modUser пользователя. Передано по ссылке
userid Идентификатор пользователя.
username Имя username пользователя.
& loginContext Ключ контекста, в котором происходит выход из системы. Передано по ссылке
& addContexts Дополнительные контексты, в которых также происходит выход из системы. Передано по ссылке

$modx->getUser() во время OnWebLogout

Процессор выхода снимает session contexts до вызова OnWebLogout. Для этого контекста $modx->user->isAuthenticated($loginContext) уже false.

Перед событием процессор не обнуляет и не перезагружает $modx->user. $modx->getUser() берёт закэшированный объект и всё ещё возвращает пользователя, который только что вышел (тот же id). Код с $modx->getUser() (или другие плагины, которые его вызывают) может выглядеть «всё ещё в системе», хотя session context уже снят.

Берите вышедшего пользователя из параметра события $user (или $scriptProperties['user']). Не считайте $modx->getUser() текущим пользователем сессии во время этого события.

Если нужен именно $modx->getUser() в состоянии «разлогинен», сбросьте и перезагрузите после снятия session contexts:

$modx->user = null;
$modx->getUser($loginContext, true);

Тот же процессор для mgr вызывает OnManagerLogout и тоже не обновляет $modx->user. Трекинг в ядре: modxcms/revolution#17015.

Пример

Записать в журнал ошибок, кто вышел. Берите $user из события, не $modx->getUser():

<?php
$eventName = $modx->event->name;
switch ($eventName) {
    case 'OnWebLogout':
        $id = $user->get('id');
        $modx->log(
            modX::LOG_LEVEL_ERROR,
            'Вышел пользователь с id ' . $id . ' из контекста ' . $loginContext
            . ' и ещё вот этих ' . print_r($addContexts, true)
        );
        break;
}

Смотрите также

Support the team building MODX with a monthly donation.

The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.

Backers

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • CrewMark
  • Fabian Christen
  • Sepia River Studios
  • Dannevang Digital
  • Alex
  • A. Moreno
  • Chris Fickling
  • Stéphane Jäggi
  • Murray Wood
  • Anton Tarasov
  • JT Skaggs
  • deJaya
  • Lefthandmedia
  • eydolan
  • Following Sea
  • Guido Gallenkamp
  • YJ
  • Raffy
  • Snow Creative
  • Nick Clark
  • Guest
  • Helen
  • krisznet
  • Yanni
  • Richard

Budget

$194 per month—let's make that $500!

Learn more