Можно ли обновлять external_id в базе данных Discourse?

Я искал информацию на форуме о том, как обновить external_id в базе данных Discourse.

Нашёл интересную тему:

Тем не менее, меня интересуют подробности о последствиях обновления external_id в базе данных.

Могу ли я просто выполнить SQL-запрос UPDATE и задать новый правильный external_id? Может ли это привести к каким-либо скрытым проблемам? Например, если у пользователя есть активная сессия или что-то ещё?

Пользователи создаются через SSO с использованием external_id, который представляет собой ID аккаунта пользователя во внешней системе. (Мне, возможно, потребуется изменить модель, но было бы здорово пока избежать изменений в модели внешней системы).

Проблема в том, что у человека может быть несколько аккаунтов во внешней системе, и он может объединить их в один. В результате, в зависимости от способа объединения, для одного и того же пользователя/электронной почты может появиться новый external_id.

Я использую опцию require_activation, и, как я прочитал в упомянутой теме, я не могу удалить запись и ждать её повторного создания.

Спасибо.

Да, вы должны иметь возможность сделать это, но сначала нужно устранить саму проблему.

Например, при объединении аккаунтов всегда убедитесь, что используется наименьший ID.

Да… при слиянии внешних учётных записей я учитываю самую старую учётную запись… но иногда это не то, что мне нужно.

Некоторые учётные записи взаимодействуют с форумом (тип A, скажем так), а другие не предназначены для этого (тип B).

Так что, если они сначала создают учётную запись типа B…
а позже создают учётную запись типа A, они входят в систему через SSO с её помощью на форуме

и позже объединяют A и B, отдавая предпочтение самой старой учётной записи, у которой другой external_id

так что да…
мне нужно придумать решение для моей внешней системы…

но я думаю, что пока настрою ежедневную задачу cron, которая будет проверять, произошло ли что-то подобное, и исправлять external_id.

спасибо!

В этом случае вы можете либо

a) синхронизировать все учетные записи с Discourse, используя механизм синхронизации SSO
b) отслеживать, какие учетные записи использовались для входа в Discourse
или
c) при слиянии выполнить внешний поиск по ID, чтобы определить, с какой учетной записью (или записями) пользователь работал в Discourse