Creare utenti di staging tramite API?

Sto valutando l’idea di creare un servizio bridge webhook+API per connettere determinate categorie su due forum Discourse diversi. L’idea generale sarebbe:

  1. Un webhook su ciascun server per gli eventi Topic e Post[1]
  2. Un listener che riceve questi eventi e li replica sul server opposto tramite API
    • Uh, qualcosa per prevenire i loop, ovviamente[2]
    • Verifica se esiste un utente con lo stesso indirizzo email sul server opposto[3]
    • Se tale utente non esiste, crea un utente “staged” (in attesa di attivazione)
    • Modifica le impostazioni di notifica dell’utente “staged” in modo che non riceva notifiche via email[4]
    • Crea o aggiorna il post sotto l’utente reale o “staged” appropriato
  3. Probabilmente una routine temporizzata per scorrere gli argomenti e assicurarsi che nulla sia stato perso, e possibilmente riordinare in modo che entrambi i lati concordino

Da Understanding user statuses, roles, and permissions, penso che gli utenti “staged” farebbero essenzialmente ciò che vogliamo: se qualcuno creasse in seguito un account con quell’indirizzo email, potrebbe “rivendicarlo” e interagire con tutti i suoi post come se fosse sempre stato lì.

Ma, c’è un modo per creare un utente “staged” tramite API? Non lo vedo in Discourse API Docs.


  1. e possibilmente anche per gli eventi Like e Solved, ma non nella prima versione ↩︎

  2. Ci ho sicuramente pensato prima di scrivere questo elenco ↩︎

  3. utilizzando gli indirizzi email come chiave perché i sistemi di account potrebbero non avere gli stessi nomi utente ↩︎

  4. Ho visto un post sulla possibilità di farlo da qualche parte qui… ↩︎

Non sono sicuro se è quello che stai cercando?

3 Mi Piace

Beh, in un certo senso. Come dice l’OP in quell’argomento, in risposta a quello…

… e lì, la risposta è fondamentalmente iniettare un’email e lasciare che il codice di gestione delle email se ne occupi. Ma, ciò non funziona per questo caso, perché devo intervenire e disattivare le notifiche email per l’utente prima di creare il post.

Succede che abbiamo SSO-overrides-username attivato per un lato del ponte proposto, quindi penso che creare qualcosa come ‘altrosito-utente’ potrebbe essere una soluzione alternativa… ma ciò non funzionerà necessariamente senza quell’impostazione SSO.

Se passare staged: true alla chiamata di creazione dell’utente admin non funziona, sospetto che saremmo aperti a una PR per abilitarlo.

(È una funzionalità piuttosto di nicchia al di fuori del tuo caso d’uso, credo?)

Forse potresti usare il percorso handle_mail per inviare una finta email come utente? (Oh, come suggerisce @blake (link))

Ciò creerebbe l’utente staged, se necessario, e l’argomento contemporaneamente.

2 Mi Piace

Con questo approccio sembrerà che gli utenti abbiano creato argomenti e risposte via email. Gli utenti “staged” possono creare post solo via email. Si otterrà un errore di accesso non valido se si tenta di creare un post non via email per un utente “staged” tramite l’API.

Qualcosa nell’approccio utente “staged” non mi convince del tutto. Potrebbe valere la pena sondare i tuoi utenti per vedere se hanno delle preoccupazioni. Se potessi ottenere il permesso dai tuoi utenti, potresti semplicemente creare utenti attivi non “staged” sul sito mirror, quindi pubblicare i loro argomenti e commenti tramite l’API.

Passare staged: true crea un utente “staged”. Presumo che un utente creato in questo modo sarà in grado di pubblicare via email. Il mio sito di sviluppo locale non è configurato per inviare email a Discourse, quindi al momento non posso testarlo.

1 Mi Piace

Ho desiderato usare discourse come processore di moduli generico per gestire i moduli di contatto. Odio i moduli di contatto, ma alcuni utenti preferirebbero usarne uno piuttosto che inviare un’email. Anche se penso che quelle persone prendano decisioni sbagliate, vorrei rendere più facile per loro contattarmi in modo che possano darmi soldi.

Sarebbe molto utile poter creare un messaggio che crei un utente “staged” senza dover ricorrere a qualche altro sistema per elaborare il modulo e inviare un’email.

Presumo che dovrò creare un plugin per farlo, ma questo è il mio piano.

Questa è una delle uniche cose che mi restano da capire per sbarazzarmi di wordpress.

Quindi forse quello che farò nel plugin è creare il post come se fosse un’email. Potrebbe non essere troppo difficile in un plugin. E ciò renderebbe probabilmente possibile tramite un’API.

2 Mi Piace

Penso che potresti usare un Wizard (:mage: Custom Wizard Plugin) per ottenere ciò senza troppi problemi. Ora puoi creare wizard anonimi. Sono felice di darti una mano se necessario!

3 Mi Piace

Sì, questo funziona: Creating a staged user with an API call - #8 by blake.

1 Mi Piace

Oh! Certo. È così che il ricevitore di posta consegna la posta. Penso di volere un endpoint che accetti campi arbitrari da qualsiasi form, li inserisca in un topic e me li consegni. Ciò mi eviterebbe di dover rendere pubblica una API key (limitata solo alla consegna di posta non sembra così terribile, avere javascript che elabora il form e poi lo consegna all’endpoint esistente).

1 Mi Piace