# Creare User external\_ids parameter

**URL:** https://meta.discourse.org/t/create-user-external-ids-parameter/286072
**Category:** Development
**Tags:** rest-api
**Created:** [20 Novembre 2023, 1:09pm UTC](https://meta.discourse.org/t/create-user-external-ids-parameter/286072 "2023-11-20T13:09:04Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![Khaldoun\_Noureddine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/khaldoun_noureddine/32/342568_2.png) [@Khaldoun\_Noureddine](https://meta.discourse.org/u/Khaldoun_Noureddine)
#### Post date: [20 Novembre 2023, 1:09pm UTC](https://meta.discourse.org/t/create-user-external-ids-parameter/286072/1 "2023-11-20T13:09:04Z")

</div>

Sto cercando di scrivere una funzione per importare tutti gli utenti esistenti dal nostro sito esterno (un servizio di terze parti, sto solo creando il middleware) e sto provando a usare la funzione [createUser](https://docs.discourse.org/#tag/Users/operation/createUser). Funziona bene, tranne per il parametro `external_ids`. Indipendentemente da ciò che invio (ho provato array, oggetti… hai capito), l’ID esterno non viene salvato ma l’utente viene creato. Nessun errore.

C’è un formato specifico per l’oggetto `external_ids`?

Ho visto la soluzione sso\_sync ma preferirei non intraprendere quella strada, soprattutto perché il parametro `external_ids` è incluso nell’API.

Qualche suggerimento? Grazie in anticipo.

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [20 Novembre 2023, 1:45pm UTC](https://meta.discourse.org/t/create-user-external-ids-parameter/286072/2 "2023-11-20T13:45:14Z")

</div>

Ciao, benvenuto 👋

Per rispondere specificamente a questo, credo che il formato previsto sia qualcosa del tipo:

`{ <nome_provider>: <id_univoco> }`

---

<div class="post-metadata">

### Author: ![Khaldoun\_Noureddine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/khaldoun_noureddine/32/342568_2.png) [@Khaldoun\_Noureddine](https://meta.discourse.org/u/Khaldoun_Noureddine)
#### Post date: [20 Novembre 2023, 2:00pm UTC](https://meta.discourse.org/t/create-user-external-ids-parameter/286072/3 "2023-11-20T14:00:52Z")

</div>

Grazie per la tua risposta e benvenuto!

Ho provato il formato che hai inviato e la richiesta è passata ma nessun ID esterno viene ancora salvato 😕 ` "external_ids": {},`

Ecco un esempio del codice che sto usando (nodejs)

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

```

C’è qualcosa che devo definire prima o qualcosa che vedi di sbagliato?

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [22 Novembre 2023, 4:53pm UTC](https://meta.discourse.org/t/create-user-external-ids-parameter/286072/4 "2023-11-22T16:53:45Z")

</div>

Hai configurato correttamente l’autenticatore? Credo che il codice pertinente sia il seguente:

> <https://github.com/discourse/discourse/blob/main/app/controllers/users_controller.rb#L718-L732>

---

<div class="post-metadata">

### Author: ![Khaldoun\_Noureddine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/khaldoun_noureddine/32/342568_2.png) [@Khaldoun\_Noureddine](https://meta.discourse.org/u/Khaldoun_Noureddine)
#### Post date: [22 Novembre 2023, 5:04pm UTC](https://meta.discourse.org/t/create-user-external-ids-parameter/286072/5 "2023-11-22T17:04:08Z")

</div>

Ho già configurato l’SSO e sono riuscito a reindirizzare dal sito di terze parti a Discourse, ma non ricordo alcun punto in cui definire il provider se non quando si definiscono i `discourse connect provider secrets`. Mi manca qualcosa?

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [22 Novembre 2023, 5:09pm UTC](https://meta.discourse.org/t/create-user-external-ids-parameter/286072/6 "2023-11-22T17:09:40Z")

</div>

Hmm, ok. Se stai usando [DiscourseConnect](https://meta.discourse.org/t/13045?silent=true), da una lettura del codice, sembra che tu non possa aggiungere l’external id durante la creazione. Il codice appena sopra gestisce solo gli account associati che sono diversi dall’SSO.

Puoi provare a effettuare due chiamate: la prima chiamata uguale a quella che hai ora, ma senza gli external ids, e una seconda chiamata a [updateUser](https://docs.discourse.org/#tag/Users/operation/updateUser), includendo le informazioni sull’external id? Speriamo che funzioni.

---

<div class="post-metadata">

### Author: ![Khaldoun\_Noureddine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/khaldoun_noureddine/32/342568_2.png) [@Khaldoun\_Noureddine](https://meta.discourse.org/u/Khaldoun_Noureddine)
#### Post date: [22 Novembre 2023, 5:13pm UTC](https://meta.discourse.org/t/create-user-external-ids-parameter/286072/7 "2023-11-22T17:13:57Z")

</div>

Grazie per il tuo aiuto, e sì, sto usando [DiscourseConnect](https://meta.discourse.org/t/13045?silent=true), che è probabilmente il motivo per cui non funziona. Penso che questo sia l’approccio che dovrò adottare. O questo, oppure dovrò fare una seconda chiamata che effettua il login SSO dell’utente con l’ID esterno in modo che sia collegato alla sua email.

Modifica: Penso che anche updateUser avrà lo stesso problema poiché non ho un provider definito, quindi probabilmente il login SSO è la mia migliore opzione.

---

<div class="post-metadata">

### Author: ![Khaldoun\_Noureddine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/khaldoun_noureddine/32/342568_2.png) [@Khaldoun\_Noureddine](https://meta.discourse.org/u/Khaldoun_Noureddine)
#### Post date: [29 Novembre 2023, 1:56pm UTC](https://meta.discourse.org/t/create-user-external-ids-parameter/286072/8 "2023-11-29T13:56:23Z")

</div>

Quindi, solo per aggiornare e chiudere questo, l’unica soluzione che ha funzionato è stata eseguire `sso_sync` dopo aver creato un nuovo utente, e anche questo non è stato molto necessario perché una volta che l’utente tenta di accedere a discourse tramite SSO, la sincronizzazione avverrà comunque via email, a quanto pare.  
Grazie a tutti coloro che hanno aiutato.

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [29 Dicembre 2023, 1:57pm UTC](https://meta.discourse.org/t/create-user-external-ids-parameter/286072/9 "2023-12-29T13:57:12Z")

</div>

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