Ao chamar user-api-key/new com um client_id que já é usado por outro usuário, o fórum lançará um erro RecordNotUnique e falhará silenciosamente com um erro interno do servidor.
Isso pode querer falhar com algo menos silencioso, informando ao usuário que já existe uma chave de API com esse ID de cliente.
Embora isso me leve à segunda pergunta, as chaves de API de usuário devem se comportar assim? O ID do cliente deve ser exclusivo entre todos os usuários?
Obrigado por relatar isso, tenho algumas perguntas para me ajudar a investigar.
Você pode fornecer um exemplo básico para que eu possa depurar isso localmente? Qual é o seu caso de uso para user-api-keys? Você está usando o aplicativo móvel Discourse Hub ou outra coisa?
A primeira e repetida autorização terá sucesso como o primeiro usuário, ao usá-la novamente para outro usuário sem alterar o client_id, ela falhará.
As chaves de API de usuário são usadas para permitir que o usuário use sua conta do fórum no cliente do jogo, para que eles possam postar do jogo. Também temos muitos usuários usando-as para autenticar com contas do fórum em seus próprios sites.
Enquanto o client_id deve ser único para os clientes do jogo, para que cada cliente seja listado como um cliente separado na tela de aplicativos. Para o caso de uso de sites, você desejará ter um client_id para que nem cada login seja listado separadamente.
Como isso deve ser implementado para casos de uso em que um site não possui seu próprio sistema de autenticação para usuários e não deve criar vários aplicativos de API de usuário?
Se o aplicativo que autentica usuários deve ser usado em vários computadores e não possui nenhum dado de usuário antes da autenticação, isso é impossível.
Não entendo como isso se relaciona com o OP, já que ele descreve um caso em que um ID de cliente é compartilhado por vários usuários, onde o seu caso parece descrever um usuário que tem vários IDs de cliente.
É chamado de ID de cliente e não ID de usuário porque um usuário pode ter vários clientes!
Na maioria dos padrões como o OAuth, o ID do cliente é descrito como “identificador do aplicativo” e pode ser usado para todos os usuários (não apenas um), por exemplo, os logins sociais do seu fórum sempre usam o mesmo ID do cliente.
No entanto, como as chaves de API de usuário parecem ser projetadas principalmente para clientes como aplicativos Discourse, elas podem ter sido projetadas para serem exclusivas, seria bom saber se são.
Responder ao acima deixaria claro se há uma verificação faltando em user_api_keys.rb ou um índice incorreto no banco de dados. Porque atualmente essas solicitações geram um assustador erro 500 e aparecem em nosso endpoint /logs.
O erro deveria ser melhor, sim, mas o client_id precisa ser único.
Quando você está enviando usuários dessa forma, deve gerar um ID exclusivo em sua chamada de API. O índice está correto, 1 usuário pode ter N client_ids.