Wenn user-api-key/new mit einer client_id aufgerufen wird, die bereits von einem anderen Benutzer verwendet wird, löst das Forum einen RecordNotUnique-Fehler aus und schlägt stillschweigend mit einem internen Serverfehler fehl.
Dies könnte mit etwas weniger stillschweigendem Verhalten fehlschlagen, das den Benutzer darüber informiert, dass bereits ein API-Schlüssel mit dieser Client-ID vorhanden ist.
Das bringt mich jedoch zur zweiten Frage: Sollten sich User-API-Schlüssel so verhalten? Sollte die Client-ID zwischen allen Benutzern eindeutig sein?
Vielen Dank für die Meldung. Ich habe jedoch ein paar Fragen, damit ich das untersuchen kann.
Können Sie mir eine einfache Reproduktion dafür geben, damit ich das lokal debuggen kann? Was ist Ihr Anwendungsfall für user-api-keys? Verwenden Sie die Discourse Hub Mobile App oder etwas anderes?
Die erste und wiederholte Autorisierung wird als erster Benutzer erfolgreich sein. Wenn sie für einen anderen Benutzer ohne Änderung der client_id erneut verwendet wird, schlägt sie fehl.
Benutzer-API-Schlüssel werden verwendet, um dem Benutzer die Verwendung seines Forenkontos im Spielclient zu ermöglichen, damit er aus dem Spiel heraus posten kann. Wir haben auch viele Benutzer, die sie verwenden, um sich mit Forenkonto bei ihren eigenen Websites zu authentifizieren.
Während die client_id für die Spielclients eindeutig sein sollte, sodass jeder Client als separater Client im Apps-Bildschirm aufgeführt wird. Für den Website-Anwendungsfall möchten Sie eine client_id haben, damit nicht jede Anmeldung separat aufgeführt wird.
Wie sollte das für Anwendungsfälle implementiert werden, bei denen eine Website kein eigenes Authentifizierungssystem für Benutzer hat und keine mehreren Benutzer-API-Anwendungen erstellen sollte?
Cookie setzen? Oder ihn durch Hashing von etwas bestimmen, das den Benutzer identifiziert (plus etwas „Geheimes“, damit externe Parteien ihn nicht replizieren können)
Wenn die Anwendung, die Benutzer authentifiziert, auf mehreren Computern verwendet werden soll und vor der Authentifizierung keine Benutzerdaten vorhanden sind, ist dies unmöglich.
Ich verstehe nicht, wie das mit dem OP zusammenhängt, da dies einen Fall beschreibt, in dem eine Client-ID von mehreren Benutzern gemeinsam genutzt wird, während Ihr Fall beschreibt, dass ein Benutzer mehrere Client-IDs hat.
Es wird Client-ID und nicht Benutzer-ID genannt, weil ein Benutzer mehrere Clients haben kann!
In den meisten Standards wie OAuth wird die Client-ID als „App-Identifikator“ beschrieben und kann für alle Benutzer verwendet werden (nicht nur für einen). Zum Beispiel verwenden Ihre Social-Login-Funktionen im Forum immer dieselbe Client-ID.
Da Benutzer-API-Schlüssel jedoch hauptsächlich für Clients wie Discourse-Apps konzipiert zu sein scheinen, wurden sie möglicherweise so konzipiert, dass sie eindeutig sind. Es wäre gut zu wissen, ob dies der Fall ist.
Die Beantwortung des oben genannten würde klären, ob in user_api_keys.rb eine Prüfung fehlt oder ein falscher Index in der Datenbank vorhanden ist. Denn derzeit führen diese Anfragen zu einem beängstigenden 500-Fehler und werden in unserem /logs-Endpunkt angezeigt.
Der Fehler sollte besser sein, ja, aber die client_id muss eindeutig sein.
Wenn Sie Benutzer auf diese Weise senden, müssen Sie eine eindeutige ID in Ihrem API-Aufruf generieren. Der Index ist korrekt, 1 Benutzer kann N client_ids haben.