Problema con l'invio programmatico di email di reimpostazione password in blocco tramite /u/{username}/password-reset.json Categoria: Sviluppo (API/Plugins)

Ciao Community di Discourse,

Sto cercando di automatizzare l’invio di email di reimpostazione password in blocco per gli utenti sulla nostra istanza Discourse self-hosted (versione 3.5.0.beta7-dev). Gli utenti sono elencati in un file CSV contenente solo custom_username, e i loro indirizzi email sono memorizzati nei loro profili Discourse. Mentre la reimpostazione manuale della password dal pannello di amministrazione (/u//preferences/security) funziona perfettamente, il mio script Python che utilizza l’endpoint /u/{username}/password-reset.json non riesce a inviare le email. Apprezzerei qualsiasi guida per risolvere questo problema.

Cosa ho fatto

  1. Creazione Utenti:

    • Ho creato con successo utenti tramite l’endpoint POST /users.json utilizzando uno script Python. Il payload è:
    {
      "email": "<email>",
      "username": "<custom_username>",
      "password": "",
      "active": true,
      "approved": true,
      "send_welcome_message": false
    }
    
    • Gli utenti appaiono nel pannello di amministrazione (/admin/users) e i loro indirizzi email sono memorizzati correttamente nei loro profili.
  2. Reimpostazione Manuale Password:

    • Dal pannello di amministrazione (/u//preferences/security), facendo clic sul pulsante “Reimposta Password” viene inviata un’email di reimpostazione password all’indirizzo email registrato dell’utente, confermando che SMTP e Sidekiq sono configurati correttamente.
  3. Reimpostazione Programmatica Password:

    • Sto utilizzando uno script Python per inviare email di reimpostazione password tramite POST /u/{username}/password-reset.json. Lo script:
      • Legge custom_username da approved_users.csv (ad esempio, kebirx-ustat45947).
      • Verifica che l’utente esista tramite GET /u/{username}.json.
      • Invia una richiesta POST a /u/{username}/password-reset.json.
    • Codice semplificato:
    response = requests.post(
        f"{FORUM_URL}/u/{username}/password-reset.json",
        headers={"Api-Key": API_KEY, "Api-Username": API_USERNAME},
        timeout=10
    )
    
    • La risposta è 200 OK, ma non vengono inviate email. Non compaiono errori nei log dello script (discourse_send_welcome_emails.log) o nei log di Sidekiq.
  4. Tentativo Precedente:

    • Ho provato a utilizzare POST /admin/users/{user_id}/send_welcome-email.json, ma ha restituito un errore 404. Non ho trovato questo endpoint nella documentazione API, quindi sono passato a /u/{username}/password-reset.json.

Ambiente

  • Versione Discourse: 3.5.0.beta7-dev

  • Configurazione: Self-hosted, accessibile all’indirizzo https://forum.kebirxai.tr

  • API Key: Con ambito admin e permessi completi

  • Formato CSV:

    custom_username
    kebirx-ustat45947
    keb21
    
  • Log:

    • I log dello script mostrano 200 OK per ogni chiamata POST /u/{username}/password-reset.json, ma non vengono ricevute email.
    • I log di Sidekiq (/var/www/discourse/log/sidekiq.log) e i log di produzione (/var/www/discourse/log/production.log) non mostrano errori relativi alle email.
    • Le email di test manuali da /admin/email funzionano correttamente.

Domande

  1. È /u/{username}/password-reset.json l’endpoint corretto per attivare programmaticamente le email di reimpostazione password? Se no, qual è l’endpoint consigliato per le email di reimpostazione password in blocco?
  2. Perché l’endpoint potrebbe restituire 200 OK ma non inviare email? Potrebbe essere correlato ai permessi API, ai problemi della coda Sidekiq o alla configurazione SMTP specifica per le email attivate tramite API?
  3. Rate Limiting: Sto elaborando gli utenti in batch di 25 per evitare i rate limit. Ci sono rate limit specifici per /u/{username}/password-reset.json?
  4. Approcci Alternativi: Esiste un modo più efficiente per attivare le email di reimpostazione password per più utenti senza chiamate API individuali? Ad esempio, un endpoint di massa o un job Sidekiq?
  5. Debugging: Quali log o impostazioni dovrei controllare per identificare perché le email attivate tramite API non vengono inviate, nonostante le reimpostazioni manuali funzionino?

Note Aggiuntive

  • La reimpostazione manuale dal pannello di amministrazione funziona, quindi SMTP (configurato in app.yml) e Sidekiq sembrano funzionare.
  • Ho verificato che gli utenti esistano e che i loro indirizzi email siano corretti nel pannello di amministrazione.
  • Non compaiono errori nei log dello script o del server, il che rende il debug impegnativo.

Qualsiasi suggerimento per il debug, endpoint alternativi o best practice per le email di reimpostazione password in blocco sarebbe molto apprezzato. Se ci sono API non documentate, plugin o modifiche di configurazione, per favore fatemelo sapere. Grazie!

1 Mi Piace

Non credo che tu abbia bisogno di una chiave API? Non sono sicuro che tu possa richiedere una password se hai effettuato l’accesso.