Criar parâmetro external_ids do usuário

Estou tentando escrever uma função para importar todos os usuários existentes do nosso site externo (terceiro, estou apenas fazendo o middleware) e estou tentando usar a função createUser. Funciona bem, exceto pelo parâmetro external_ids. Não importa o que eu envie (tentei arrays, objetos… o que você imaginar), o ID externo não é salvo, mas o usuário é criado. Sem erros.

Existe algum formato específico para o objeto external_ids?

Eu vi a solução sso_sync, mas prefiro não seguir por esse caminho, especialmente porque o parâmetro external_ids está incluído na API.

Alguma dica? Agradeço desde já.

Olá, bem-vindo :wave:

Para responder especificamente sobre isso, acredito que o formato esperado seja algo como:

{ <provider_name>: <unique_id> }

1 curtida

Obrigado pela sua resposta e seja bem-vindo!

Tentei o formato que você enviou e a solicitação foi bem-sucedida, mas nenhum ID externo ainda é salvo :confused: "external_ids": {},

Aqui está um exemplo do código que estou usando (nodejs)

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 }),

Há algo que eu deva definir antes ou algo que você possa ver de errado?

Você configurou o autenticador corretamente? Acredito que o código relevante seja o seguinte:

Já configurei o SSO e consegui redirecionar do site de terceiros para o Discourse, mas não me lembro de nenhum lugar para definir o provedor, exceto ao definir os segredos do provedor do Discourse Connect. Há algo que estou perdendo?

Hmm, ok. Se você estiver usando o DiscourseConnect, pela leitura do código, parece que você não pode adicionar o ID externo ao criar. O código logo acima lida apenas com contas associadas, que são diferentes do SSO.

Você pode tentar fazer duas chamadas: a primeira chamada igual à que você tem agora, mas sem os IDs externos, e adicionar uma segunda chamada para updateUser, incluindo as informações do ID externo? Esperamos que isso funcione.

1 curtida

Obrigado pela ajuda, e sim, estou usando DiscourseConnect, que provavelmente é o motivo pelo qual isso não está funcionando. Acho que essa é a abordagem que terei que seguir. Ou então, terei que fazer uma segunda chamada que o login SSO autentique o usuário com o ID externo para que ele seja vinculado ao seu e-mail.

Edição: Acho que o updateUser também terá o mesmo problema, pois não tenho um provedor definido, então provavelmente o login SSO é a minha melhor aposta.

Para atualizar e encerrar este assunto, a única solução que funcionou foi executar sso_sync após criar um novo usuário, e mesmo isso não foi muito necessário porque, uma vez que o usuário tenta fazer o sso no discourse, a sincronização ocorrerá de qualquer maneira por e-mail, ao que parece.

Obrigado a todos que ajudaram.

2 curtidas

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.