Когда Discourse выступает в роли провайдера идентификации, сохраняет ли он внешние ID пользователей?

Я использую Discourse в качестве провайдера идентификации для своего Rails-приложения (вы входите в мое Rails-приложение с помощью учетной записи Discourse, а не наоборот). Я хотел бы добавить ссылку на страницах профилей пользователей в Discourse, которая ведет к их соответствующему профилю в моем Rails-приложении. Для этого Discourse должен знать их идентификатор пользователя в моем приложении Rails/базе данных.

Я знаю, что DiscourseConnect сохраняет external_id, когда вы делаете это наоборот (вход в Discourse с помощью другого логина). Но сохраняет ли он что-либо, когда это делается в обратном порядке?

Если нет, есть ли какие-либо рекомендации по его хранению?

Нет, поэтому вам понадобится что-то кастомное.

Интересно, не имеет ли смысл обрабатывать это в вашем Rails-приложении, раз оно знает ID пользователя в Discourse?

Вы можете настроить маршрут вроде /profile-by-discourse-id/:discourse_id, который будет находить соответствующего пользователя по ID из Discourse, а затем перенаправлять на профиль пользователя в Rails-приложении.

Спасибо, @david. Как ни странно, я сделал именно это для ссылок в обратном направлении (из профилей пользователей моего Rails-приложения в профили пользователей Discourse) с помощью этого плагина Discourse (/user-by-id/123/summary), так как мое Rails-приложение хранит ID пользователя Discourse вместо имени пользователя (поскольку имена пользователей могут меняться).

Это решение могло бы сработать и в обратном направлении, за исключением того факта, что не у всех пользователей форума есть профили пользователей в моем Rails-приложении. Пользователь Rails создается только тогда, когда пользователь Discourse «вступает» в организацию, тогда как форум Discourse может содержать и не-участников.

Так что, полагаю, у меня есть два варианта:

A) Создать JavaScript-плагин, который отправляет AJAX-запрос в мое Rails-приложение, чтобы определить, является ли пользователь Discourse также пользователем Rails-приложения, и если да, то отобразить ссылку; или

B) В момент создания пользователя Rails-приложения и его привязки к пользователю Discourse, помимо хранения ID пользователя Discourse в базе данных Rails-приложения, каким-то образом сохранить ID пользователя Rails в профиле пользователя Discourse (например, как пользовательское поле).

Мне кажется, что вариант (B) — лучшее решение (при условии, что пользовательское поле нельзя изменить, кроме как администраторам), хотя я не знаком с пользовательскими полями или тем, доступны ли они через API.

РЕДАКТИРОВАНИЕ: Теперь я вспомнил, что выяснял это в прошлый раз: проблема в том, что пользовательские поля могут редактироваться самим пользователем, что делает их плохим местом для хранения системной ссылки, сгенерированной автоматически :confused: