Обработка отмененных подписок

Я использую WordPress SSO для авторизации пользователей, купивших членство (я реализовал в WordPress собственную логику для определения статуса членства). Всё работает хорошо, но меня интересует, как обрабатывать отменённые членства.

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

Однако у меня есть ещё два вопроса:

  • Что происходит с темами/сообщениями, которые они опубликовали на форуме? Я хочу, чтобы они остались, следовательно, это означает, что я не могу удалить пользователя.
  • Мне нужно убедиться, что дайджест-письма не отправляются отменённым членам. Discourse совершенно не знает, что учётная запись была отменена, пока я не сделаю «что-то». Что именно это, при условии, что я не хочу удалять их контент?

Решается ли всё это подавлением пользователей (user suppression), и какие существуют лучшие практики для автоматизации этого процесса? Я предполагаю, что потребуется какой-то собственный код, но проверяю, можно ли обойтись без него.

Спасибо.

Вы можете их анонимизировать. Таким образом информация сохранится, но не пользователь.

Другой вариант, который вы можете использовать, — реализовать собственную логику: вместо создания пользователя добавлять его в новую группу. Таким образом, дайджест будет доступен только тем, у кого есть доступ к категории.

Ещё один вариант — запустить某种 cron-задачу, которая принудительно завершает сеанс (или удаляет учётную запись) у всех пользователей, чьи подписки были отменены.

Спасибо, @marianord. Боюсь, я не до конца понял второй абзац. Когда вы говорите «вместо создания пользователя», на каком этапе жизненного цикла пользователя вы имеете в виду? Я, вероятно, упускаю какой-то очевидный момент, но ваша идея мне не совсем ясна. Не могли бы вы уточнить?

Также я изучу функцию анонимизации, но у меня есть несколько вопросов по этому поводу.

  • Как будет отображаться их контент в плане имени пользователя, которое показывается рядом с их постами?
  • Если мне удастся убедить их повторно подписаться на мою подписку (с тем же адресом электронной почты и т. д.), повлияет ли это каким-либо образом на анонимизацию? То есть, будут ли их старые посты снова отображаться с их именем пользователя?

Еще раз спасибо.

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

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

Возможно, это сработает. Есть какие-то мысли по этому поводу?

Возможно, хорошим способом автоматизации этого процесса будет приостановка учётной записи пользователя через API Discourse. При приостановке пользователь выходит из системы Discourse и больше не получает дайджест-письма. Если при приостановке указать message, это сообщение будет отправлено пользователю по электронной почте. Это можно использовать, чтобы побудить его продлить членство.

Стоит отметить, что функция приостановки была разработана для работы с проблемными пользователями, а не для случаев истечения срока членства, которое может быть продлено в будущем. Возможно, вам потребуется настроить текст шаблона user_notifications.account_suspended.text_body_template на вашем сайте, чтобы адаптировать шаблон письма, отправляемого приостановленным пользователям.

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

Простого способа снять анонимизацию пользователя не существует. Единственный известный мне подход — объединить анонимного пользователя с новым пользователем через консоль Rails. Поскольку анонимизация удаляет все идентифицирующие данные пользователя, может быть сложно определить, какие учётные записи нужно объединить. Если есть вероятность, что пользователи продлят своё членство, приостановка учётной записи, вероятно, будет лучшим решением.

Спасибо, @simon — это очень полезно.

Да, судя по вашему сообщению, приостановка кажется правильным подходом в данном случае. Но у меня есть вопрос насчёт отправляемых eMails. У меня есть eMails на основе CRM, которые отправляются, когда пользователи отменяют подписку, поэтому я не хочу, чтобы Discourse отправлял что-либо вообще.

Вы упоминаете: «Если при приостановке пользователя указано сообщение, оно будет отправлено пользователю по электронной почте».

Если я НЕ укажу сообщение, означает ли это, что ничего не будет отправлено, и мне не нужно беспокоиться об обновлении шаблона (поскольку он никогда не будет отправлен)?

Просто глядя на функцию приостановки, я немного запутался в том, как используются поля «Причина приостановки» и eMail.

В общем, моя цель — приостановить пользователя и больше ничего не делать :slight_smile:

Ещё раз спасибо.

Это верно. Самый простой способ проверить это — создать пользователя с временным адресом электронной почты и попробовать приостановить и возобновить его действие через интерфейс.

При приостановке пользователя должны быть установлены поля suspended_until и reason. Эти поля отображаются приостановленному пользователю при попытке входа на сайт. Вы можете настроить этот текст, найдя login.suspended_with_reason на странице Администрирование / Настройка / Текст.

Если вы не включите настройку сайта hide suspension reasons, на карточке пользователя и странице профиля приостановленного пользователя будет отображаться уведомление о том, что пользователь приостановлен. Если вы включите настройку сайта hide suspension reasons, уведомление увидят только сотрудники.