Я пытаюсь написать функцию для импорта всех существующих пользователей с нашего внешнего сайта (это сторонний сервис, я занимаюсь только middleware) и использую функцию createUser. Она работает отлично, за исключением параметра external_ids. Неважно, что я туда отправляю (попробовал массивы, объекты и т.д.) — внешний ID не сохраняется, хотя пользователь создается. Ошибок нет.
Есть ли какой-то специальный формат для объекта external_ids?
Я видел решение с sso_sync, но мне бы не хотелось идти по этому пути, тем более что параметр external_ids включен в API.
Я уже настроил SSO и смог перенаправить пользователя с сайта стороннего провайдера в Discourse, но не помню места, где можно определить провайдера, кроме как при настройке discourse connect provider secrets. Не упустил ли я что-то?
Хм, хорошо. Если вы используете DiscourseConnect, то, судя по коду, добавить внешний ID при создании нельзя. Код, расположенный чуть выше, обрабатывает только связанные учетные записи, которые отличаются от SSO.
Попробуйте выполнить два вызова: первый — такой же, как у вас сейчас, но без внешних ID, а второй — вызовите updateUser, включив информацию о внешнем ID. Надеюсь, это сработает.
Спасибо за вашу помощь. Да, я использую DiscourseConnect, и, скорее всего, именно поэтому это не работает. Думаю, мне всё же придётся прибегнуть к этому подходу. Иначе мне придётся сделать второй запрос для входа через SSO с использованием внешнего идентификатора, чтобы связать его с их электронной почтой.
Редактирование: Похоже, что функция updateUser столкнётся с той же проблемой, так как у меня не определён провайдер, поэтому, вероятно, вход через SSO — мой лучший вариант.
Итак, чтобы обновить и закрыть эту тему, единственное рабочее решение — запустить sso_sync после создания нового пользователя. Хотя даже это не было строго необходимо: как только пользователь попытается войти через SSO в Discourse, синхронизация всё равно произойдёт автоматически, судя по всему, через email.
Спасибо всем, кто помог.