Деактивированные пользователи иногда не деактивируются

Мне не удалось воспроизвести эту проблему, но за последний месяц я заметил два случая, когда пользователь якобы был деактивирован (согласно журналам действий персонала), но на самом деле деактивация не произошла (пользователь всё ещё мог входить в систему).

Например, этот пользователь был «деактивирован» 29 дней назад, но сегодня смог отправить мне личное сообщение (единственные другие действия персонала после деактивации — «проверка электронной почты»)

Вот ещё один случай (другой сотрудник смог «деактивировать» того же пользователя снова через 4 часа без предварительной реактивации):

Я использую версию 2.9.0.beta9

Эта проблема всё ещё актуальна (она возникает несколько раз в месяц). Кто-нибудь ещё сталкивался с ней?

Вот код контроллера:

StaffActionLogger работает корректно, но я задумался, не происходит ли сбой в методе User.deactivate.

Общим для всех ошибок является то, что они возникают при API-запросах. Вот что я обычно использую:

PUT https://<MY_SITE>/admin/users/<USER_ID>/deactivate

Api-Username:<ADMIN_USER>
Api-Key:<KEY>

data: {"context":"/admin/users/<USER_ID>/<USER_NAME>"}

Я всегда получаю ответ “success: OK”.

Есть ли какие-то другие логи, которые можно проверить, или другие варианты действий?

Я использую версию 2.9.0.beta11.

Это всё ещё происходит время от времени. Например, этот пользователь был изначально «деактивирован» 23 августа, но я только сейчас заметил, что он всё ещё был активен, и фактически деактивировал его.

Как пользователь может быть деактивирован дважды (без повторной активации между этими событиями)?

У меня есть ежедневная задача, которая запускает запрос для проверки такой ситуации. Вчера она ничего не вернула, а сегодня — этого одного пользователя. Похоже, что пользователь был правильно деактивирован 23 августа, но каким-то образом был активирован вчера (без записи об этом в логах).

Возможно ли активировать пользователя (через API или интерфейс) без оставления следа? Я предполагаю, что это могло произойти только при прямом изменении базы данных, чего я точно не делал (я единственный администратор).

Такое может случиться. Всё, что нужно деактивированному пользователю для повторной активации своей учетной записи, — это попытаться войти на сайт, а затем перейти по ссылке в письме с подтверждением, которое будет отправлено ему.

Когда деактивированный пользователь пытается войти, он увидит это модальное окно:

Discourse отправит ему письмо с темой «Подтвердите свою новую учетную запись»:

После перехода по ссылке в письме пользователь будет автоматически авторизован в Discourse.

Такое поведение сохраняется уже столько времени, сколько я себя помню. Я не думаю, что это ошибка, но могу и ошибаться. Отправка письма «Подтвердите свою новую учетную запись» пользователю, у которого уже есть учетная запись, кажется немного странной.

Редактирование: чтобы получить желаемое поведение, вам, вероятно, следует «приостановить» пользователя вместо его деактивации.

Загадка разгадана! Спасибо, Саймон. Можете закрыть эту тему.