Pare o Discord solicitando autenticação a cada login

Olá!

Configurei o login do Discord na minha instalação auto-hospedada. Funciona muito bem… exceto por uma pequena coisa.

Quando um usuário faz login com o Discord, ele é levado para a página de autorização toda vez, o que significa que ele tem que concordar com a autorização toda vez que faz login. Pelo que entendi, este deveria ser apenas um processo de uma etapa na primeira vez que eles conectam o login do Discord com o Discourse.

De qualquer forma, como corrigir isso? Segui a documentação.

3 curtidas

Alguém está enfrentando esse problema?

2 curtidas

Sim, tentei na minha instância e posso replicar o problema.

2 curtidas

Você observa o mesmo comportamento em outros sites que oferecem “login com Discord”? Se sim, pode ser o comportamento esperado do sistema de login do Discord, em vez de um problema específico do Discourse.

Este não é o comportamento esperado. Outros sites e fóruns que utilizo login apenas com Discord requerem uma autenticação única. Depois disso, sempre que você faz login com Discord, você está automaticamente logado sem precisar ir para a página de autenticação.

Isso tem a ver com o Discourse.

Existe um exemplo público que você possa compartilhar para que possamos testar e comparar a implementação?

Não tenho certeza do que você quer dizer com exemplo público, peço desculpas.

No entanto, isso não é a norma. Deve exigir apenas autenticação via Discord, apenas na primeira vez.

Quero dizer:

Você pode compartilhar um link para um deles? Assim, poderemos ver como eles são implementados e ajustar o Discourse para corresponder.

Aqui está um fórum que frequento, mas não é software Discourse.

https://famiboards.com/

1 curtida

Gostaria de saber se é por causa do parâmetro prompt ausente para none na URL de autorização?

prompt controla como o fluxo de autorização lida com autorizações existentes. Se um usuário autorizou anteriormente seu aplicativo com os escopos solicitados e o prompt está definido como consent, ele solicitará que eles aprovem novamente sua autorização. Se definido como none, ele pulará a tela de autorização e os redirecionará de volta para seu URI de redirecionamento sem solicitar sua autorização.

1 curtida

Acho que você pode ter razão. Encontrei isto.
https://community.auth0.com/t/discord-connection-prompts-for-consent-every-login/135157
Talvez isso possa ser atualizado no Discourse? Pelo que sei, isso não é algo que eu possa fazer no meu painel administrativo, ou no portal de desenvolvedor do Discord.

2 curtidas

Há uma configuração de prompt para Google Auth no Discourse, e acho que seria razoável adicionar uma para Discord.

1 curtida

Acabei de perceber isso também.

Você sabe por acaso onde o arquivo para essa configuração de login está instalado dentro do Discourse? Estou pensando em colocar

"upstream_params": {
	"prompt": {
		"value": "none"
	}
},

dentro do arquivo e reconstruir, vendo se isso resolve.

Edição: Pensando bem, acho que não consigo localizar o arquivo que me permitiria implementar isso. Acho que uma correção do Discourse é o que é necessário para que funcione como esperado.

Como tenho o problema na minha instância:

Sim, aguarde notícias da equipe :+1:

1 curtida

Legal. Preciso fazer mais alguma coisa (além de esperar por uma atualização?)

Imagino que não haja um prazo real para uma correção como essa, e provavelmente depende de um fluxo de status de urgência. É apenas um pequeno inconveniente, suponho. Mas seria ótimo ver corrigido!

Uma alteração para adicionar prompt=none soa bem para mim. Se alguém puder escrever, testar e fazer um PR, isso ajudará a agilizar a alteração.

O arquivo relevante seria este, mas não sei de imediato exatamente qual alteração seria necessária.

2 curtidas

Ao examinar o arquivo, adicionei

option :authorize_params, prompt: 'none'

abaixo de

option :authorize_options, %i[scope permissions]

na minha instalação auto-hospedada.

Funciona mais ou menos…, mas não como gostaríamos.

Ele ainda leva você para a página de autenticação do Discord, no entanto, o usuário não precisa mais clicar em authorize. A página recarregará e o levará de volta para sua página do Discourse.

Um passo à frente, outro passo atrás. :melting_face:

Editar: Vejo que @Arkshine e eu testamos a mudança e obtivemos o mesmo resultado.

1 curtida

Fiz um teste rápido (https://discourse.arkshine.dev/):

Ele mostra a página de autenticação, mas redireciona automaticamente.

1 curtida

Mesmo com a alteração, ele ainda o direciona para a página de autenticação do Discord - o que não deveria fazer (embora desta vez você não precise pressionar authenticate manualmente).

Enviar um PR com a alteração sugerida infelizmente não resolveria o problema.