Создать параметр external_ids для пользователя

Я пытаюсь написать функцию для импорта всех существующих пользователей с нашего внешнего сайта (это сторонний сервис, я занимаюсь только middleware) и использую функцию createUser. Она работает отлично, за исключением параметра external_ids. Неважно, что я туда отправляю (попробовал массивы, объекты и т.д.) — внешний ID не сохраняется, хотя пользователь создается. Ошибок нет.

Есть ли какой-то специальный формат для объекта external_ids?

Я видел решение с sso_sync, но мне бы не хотелось идти по этому пути, тем более что параметр external_ids включен в API.

Любые советы? Заранее спасибо.

Привет, добро пожаловать :wave:

Чтобы ответить конкретно на этот вопрос, я считаю, что ожидаемый формат выглядит примерно так:

{ <название_провайдера>: <уникальный_id> }

Спасибо за ваш ответ и добро пожаловать!

Я попробовал формат, который вы отправили, и запрос прошел, но внешние идентификаторы всё равно не сохраняются :confused: "external_ids": {},

Вот пример кода, который я использую (Node.js):

const create = await connection.post('/users.json', {
			name: `${req.body.first_name} ${req.body.last_name}`,
			email: req.body.email,
			password: test_password,
			username: `${req.body.first_name}_${req.body.last_name}`,
			external_ids: JSON.stringify({ 'magento': req.body.user_id }),

Нужно ли мне что-то определить заранее или вы видите какую-то ошибку?

Вы правильно настроили аутентификатор? Я полагаю, что соответствующий код находится здесь:

Я уже настроил SSO и смог перенаправить пользователя с сайта стороннего провайдера в Discourse, но не помню места, где можно определить провайдера, кроме как при настройке discourse connect provider secrets. Не упустил ли я что-то?

Хм, хорошо. Если вы используете DiscourseConnect, то, судя по коду, добавить внешний ID при создании нельзя. Код, расположенный чуть выше, обрабатывает только связанные учетные записи, которые отличаются от SSO.

Попробуйте выполнить два вызова: первый — такой же, как у вас сейчас, но без внешних ID, а второй — вызовите updateUser, включив информацию о внешнем ID. Надеюсь, это сработает.

Спасибо за вашу помощь. Да, я использую DiscourseConnect, и, скорее всего, именно поэтому это не работает. Думаю, мне всё же придётся прибегнуть к этому подходу. Иначе мне придётся сделать второй запрос для входа через SSO с использованием внешнего идентификатора, чтобы связать его с их электронной почтой.
Редактирование: Похоже, что функция updateUser столкнётся с той же проблемой, так как у меня не определён провайдер, поэтому, вероятно, вход через SSO — мой лучший вариант.

Итак, чтобы обновить и закрыть эту тему, единственное рабочее решение — запустить sso_sync после создания нового пользователя. Хотя даже это не было строго необходимо: как только пользователь попытается войти через SSO в Discourse, синхронизация всё равно произойдёт автоматически, судя по всему, через email.
Спасибо всем, кто помог.