Melhor maneira de atualizar ou criar usuário existente, via API, a partir de cliente conectado?

Aqui está o caso de uso, que tenho certeza que muitas pessoas enfrentaram:

  • Ter um monte de usuários no Discourse
  • Ter um sistema externo (provedor de serviços, Drupal) que usa a API para criar usuários do Discourse e gerenciar associações de grupo
  • O Drupal tem um conjunto de usuários parcialmente sobreposto. Ou seja, usuários com o mesmo endereço de e-mail existem no Discourse e no Drupal, mas não estão vinculados
  • O Drupal usa a API para sincronizar usuários, grupos e associações porque os usuários podem nunca usar SSO para acessar o Discourse, confiando em e-mails

Comportamento atual:

  • O Discourse às vezes rejeita a chamada da API para criar um usuário do Discourse, porque um usuário do Discourse já existe com o mesmo e-mail

Comportamento desejado:

  • O Discourse vincula o usuário do Discourse existente ao usuário do Drupal, via e-mail

Solução proposta:

  • Consultar o endpoint da API do Discourse /admin/users/list/all.json?email=$email para buscar quaisquer usuários com o endereço de e-mail correspondente
  • Se o usuário correspondente existir
    • Conectar os usuários existentes (lado do Drupal)
  • senão
    • Criar um novo usuário do Discourse

Perguntas

  • Isso parece uma solução razoável, ou existe uma maneira melhor de fazer isso?
  • A consulta da API está formulada corretamente?
    Nem all.json nem o parâmetro de string de consulta email são documentados, e encontrei muito poucos exemplos, mas esta postagem parece indicar que é a melhor maneira de prosseguir.
1 curtida

Não sou tão especialista quanto alguns, mas acho que sim.

Parece certo para mim. A melhor e sempre atualizada documentação é Engenharia reversa da API do Discourse.

1 curtida