Quando si chiama user-api-key/new con un client_id già utilizzato da un altro utente, il forum restituirà un errore RecordNotUnique e fallirà silenziosamente con un errore interno del server.
Questo potrebbe voler fallire con qualcosa di meno silenzioso, informando l’utente che esiste già una chiave API con quell’ID client.
Anche se questo mi porta alla seconda domanda, le chiavi API utente dovrebbero comportarsi in quel modo? L’ID client dovrebbe essere univoco tra tutti gli utenti?
Grazie per la segnalazione, ho un paio di domande per potermi occupare di questo problema.
Puoi fornire un esempio di base per questo in modo che possa eseguire il debug localmente? Qual è il tuo caso d’uso per le user-api-key? Stai utilizzando l’app mobile Discourse Hub o qualcos’altro?
La prima e ripetuta autorizzazione avrà successo come primo utente, quando la si riutilizza per un altro utente senza cambiare il client_id fallirà.
Le chiavi API utente vengono utilizzate per consentire all’utente di utilizzare il proprio account del forum nel client di gioco, in modo che possano pubblicare dal gioco. Abbiamo anche molti utenti che le utilizzano per autenticare gli account del forum sui propri siti web.
Mentre l’ID client dovrebbe essere univoco per i client di gioco, in modo che ogni client sia elencato come client separato nella schermata delle app. Per il caso d’uso del sito web, vorresti avere un ID client in modo che non ogni accesso venga elencato separatamente.
Come dovrebbe essere implementato per i casi d’uso in cui un sito Web non dispone di un proprio sistema di autenticazione per gli utenti e non dovrebbe creare più applicazioni API utente?
Impostare un cookie? O determinarlo tramite hashing di qualcosa che identifica l’utente (più qualcosa di “segreto” in modo che le parti esterne non possano replicarlo)
Se l’applicazione che autentica gli utenti deve essere utilizzata su più computer e non dispone di dati utente prima dell’autenticazione, ciò è impossibile.
Non capisco come questo si colleghi all’OP poiché descrive un caso in cui un ID client è condiviso da più utenti, mentre il tuo caso sembra descrivere un utente che ha più ID client.
Viene chiamato ID client e non ID utente perché un utente può avere più client!
Nella maggior parte degli standard come OAuth, l’ID client viene descritto come “identificatore dell’app” e può essere utilizzato per tutti gli utenti (non solo uno), ad esempio i tuoi accessi social del forum utilizzano sempre lo stesso ID client.
Tuttavia, poiché le chiavi API utente sembrano essere progettate principalmente per client come le app Discourse, potrebbero essere state progettate per essere univoche, sarebbe bello sapere se lo sono.
Rispondere a quanto sopra chiarirebbe se manca un controllo in user_api_keys.rb o un indice errato nel database. Perché attualmente queste richieste generano un preoccupante errore 500 e compaiono nel nostro endpoint /logs.