Fluxo OAuth 2 para imgur no plugin Discourse

Olá,

Estou desenvolvendo um plugin muito específico para nossa instância do Discourse e tenho algumas dúvidas.

Em algum momento, o plugin precisará enviar uma coleção de imagens de tópicos do Discourse para o Imgur. A parte que coleta essas imagens já está pronta.

Agora estou tentando autenticar na API do Imgur usando o fluxo OAuth2 deles. Já criei uma interface de administração para o plugin que permite clicar em um botão e autorizar o plugin na sua conta do Imgur. Após o usuário fazer login, uma URL de callback (configurada como minha instância do Discourse e uma rota específica que criei no plugin) é chamada com o token de acesso (veja o exemplo).

http://localhost:3000/admin/plugins/plugin_name/callback#access_token=<token>&...

Minha pergunta é: como posso obter esse token de volta? Não faço ideia de por onde começar.

Minha compreensão é que, como o token é retornado em um parâmetro de hash, isso deve ser feito no lado do JS. Tentei configurar um controlador e uma rota para minha URL de callback, mas não consegui descobrir como ler a URL (e especialmente a parte do hash) a partir dali. (Não encontrei nada útil na documentação do Ember.js ou no StackOverflow). Tentei configurar diferentes ouvintes de eventos, mas eles nunca parecem ser acionados.

Minha segunda pergunta é: onde devo armazenar o token e o token de atualização? Posso salvá-lo como uma configuração do sistema do plugin? Ouvi falar do PluginStore, mas ele só é acessível em Ruby (o que significaria criar um endpoint para o cliente enviar esses tokens ao servidor). Além disso, isso é seguro do ponto de vista de segurança?

Obrigado!

Edição: Tive um erro de digitação no nome do arquivo da minha rota, faltava um ‘s’, por isso nada foi acionado…

Você não conseguirá realizar isso via HTTP para localhost. Recomendamos que você precisará simular HTTPS com uma ferramenta como https://ngrok.com/ ou executar seu servidor de desenvolvimento na nuvem em modo HTTPS com um domínio.

Eu também achei que precisaria disso, mas sou redirecionado corretamente para minha URL local e vejo o token na URL.

Sim, você está certo, o cliente pode usar HTTP. O problema é que ele pode ser interceptado e os tokens lidos, então não há nenhum sentido em usar OAuth2 desde o início :). Pessoalmente, também me sentiria mais confortável trabalhando com o protocolo final completo no desenvolvimento, para saber que meu código funciona.

Ah, sim, concordo plenamente, isso é apenas para fins de desenvolvimento neste momento. Claro, em produção eu usaria https :slight_smile: