Crea utenti tramite API utilizzando ID utente espliciti

Ciao, sto utilizzando l’API di Discourse e il plugin OAuth2 per migrare e effettuare l’accesso degli utenti dal mio servizio SSO a un’installazione privata di Discourse. Finora sono riuscito a migrare con successo tutti gli utenti SSO in modo programmatico. Durante la migrazione programmatica, i nuovi utenti vengono creati con un ID specifico di Discourse a incremento automatico. La mia domanda è: posso utilizzare l’API per creare un utente con un ID esplicito per quell’utente? Cioè, se assegno un ID 22 a un utente, posso interrogarlo tramite /admin/users/22.json?

Ho provato a passare i parametri ‘id’ e ‘external_id’ nel corpo della richiesta POST, ma non funziona.

Modifica: esiste inoltre un modo, tramite l’API e dato un ID utente specifico, per modificare il nome utente?

Grazie

1 Mi Piace

Non è possibile assegnare l’ID.

Esiste una rotta per ID esterno:

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

Se abiliti l’impostazione del sito sso_overrides_username (credo che sia una funzionalità esistente), non è necessario modificare il nome utente tramite l’API.

3 Mi Piace

Grazie, ma non ho l’external_id al momento della creazione dell’utente. L’utente viene creato in modo programmatico e l’associazione con l’SSO esterno avverrà solo quando l’utente accederà a Discourse. A meno che non esista un modo per associare programmaticamente l’utente a quell’external_id durante la migrazione degli utenti, non credo che l’external_id possa essere utilizzato.

Hai già dati in Discourse con cui questi utenti devono essere associati? Perché hai bisogno di creare gli utenti?

Devo migrare un gran numero di utenti esistenti dal mio SSO a Discourse. Questi utenti potrebbero non accedere mai direttamente a Discourse, ma dovrebbe essere possibile, ad esempio, inviare loro messaggi o recuperare le loro notifiche tramite l’API di Discourse. Per questo motivo, è necessario crearli proattivamente in modo programmatico. Inoltre, gli utenti possono modificare il proprio nome utente su SSO, quindi, dato un ID, devo essere in grado di aggiornare anche il nome utente dell’utente su Discourse.

Ho iniziato un nuovo argomento o è stato cancellato qualcos’altro in qualche modo?

Sembra che l’SSO dovrebbe avere l’account e conoscere un ID esterno che potresti usare per creare il record dell’utente e poi utilizzarlo in futuro. Ma se ciò fosse impossibile in qualche modo, potresti provare a cercare l’utente tramite indirizzo email: potresti anche creare un secondo indirizzo email fittizio (dato che, e se cambiassero il loro vero indirizzo email?) e poi magari nasconderlo in qualche modo, così da poterlo usare come identificativo in futuro.