Criar usuários através da API usando IDs de usuário explícitos

Olá, tenho usado a API do Discourse e o plugin OAuth2 para migrar e fazer o login de usuários do meu próprio serviço SSO para uma instalação privada do Discourse. Até agora, consegui migrar programaticamente todos os usuários do SSO para o Discourse com sucesso. Ao migrar programaticamente, novos usuários são criados com um ID específico do Discourse em autoincremento. Minha pergunta é: posso usar a API para criar um usuário com um ID explícito para esse usuário? Ou seja, se eu atribuir um ID:22 a um usuário, poderei consultá-lo em /admin/users/22.json?

Tentei passar os parâmetros ‘id’ e ‘external_id’ no corpo da requisição POST, mas não funcionou.

edição: também, existe uma maneira, por meio da API, de alterar o nome de usuário de um usuário específico, dado o seu ID?

Obrigado

1 curtida

Você não pode atribuir o ID.

Existe uma rota de ID externo:

    get "#{root_path}/by-external/:external_id" => "users#show", constraints: { external_id: /[^\/]+/ }

Se você ativar a configuração do site sso_overrides_username (acho que isso existe), não será necessário alterar o nome de usuário por meio da API.

3 curtidas

Obrigado, mas não tenho o external_id quando o usuário é criado. O usuário é criado programaticamente, e a associação com o SSO externo só ocorrerá quando o usuário fizer login no Discourse. A menos que haja uma maneira de associar programaticamente o usuário a esse external_id durante a migração de usuários, não acho que o external_id possa ser utilizado.

Você já possui dados no Discourse com os quais esses usuários precisam ser associados? Por que você precisa criar os usuários?

Preciso migrar vários usuários existentes do meu SSO para o Discourse. Esses usuários podem nunca fazer login diretamente no Discourse, mas deve ser possível, por exemplo, enviar mensagens a eles ou recuperar suas notificações via API do Discourse. É por isso que eles devem ser criados proativamente de forma programática. Além disso, os usuários podem alterar seu nome de usuário no SSO, então, dado um ID, preciso ser capaz de atualizar o nome de usuário de um usuário no Discourse também.

Eu iniciei um novo tópico ou o outro conteúdo foi excluído de alguma forma?

Parece que o SSO teria a conta e conheceria um ID externo que você poderia usar para criar o registro do usuário e, em seguida, usá-lo no futuro. Mas, se isso for impossível de alguma forma, você pode tentar encontrar o usuário pelo endereço de e-mail — você poderia até criar um segundo endereço de e-mail fictício (já que e se eles mudarem seu e-mail real?) e, em seguida, talvez ocultá-lo de alguma forma para que você possa usá-lo como identificador daqui para frente.