Usando Omniauth, como posso ver os repositórios de um usuário que faz login no Github?
-
20-12-2019 - |
Pergunta
Configurei o Omniauth em meu aplicativo Rails 4 para permitir que um usuário faça login usando o Github.
Esta parte funciona bem.
Agora, gostaria de listar os repositórios desse usuário (solicito o escopo repo
ao pedir ao usuário para autorizar meu aplicativo.
Pesquisei muito no Google, mas não entendo como fazer isso.
Alguém pode me dizer como posso usar a autenticação existente para listar os repositórios do meu usuário?
Solução
Bem, OmniAuth é apenas uma biblioteca de autenticação flexível.Seu único propósito é autenticar usuários.Qualquer comportamento personalizado que você desejar deve ser implementado por você ou por outra joia.
Você pode conseguir o que deseja simplesmente usando API bem documentada do GitHub:
# callbacks_controller.rb
require "open-uri"
require "json"
omniauth = env['omniauth.auth']
repositories_json = open(omniauth.extra.raw_info.repos_url,
"Accept" => "application/vnd.github.v3+json",
"Authorization" => "token #{omniauth.credentials.token}"
).read
repositories = JSON.parse(repositories_json)
Se isso é tudo que você precisa, então, use-o.Se você tiver outros requisitos além deste, talvez deva dar uma olhada no jóia do github.
Além disso, você só deve usar o escopo repo
se você deseja acessar os repositórios privados de seus usuários.E solicitar acesso aos repositórios privados de um usuário é um pouco intrusivo, então não faça isso levianamente.
Se você realmente deseja acessar os repositórios privados de um usuário, será necessário anexar ?type=all
até o final do repos_url.Então você teria que fazer algo como:
open("#{omniauth.extra.raw_info.repos_url}?type=all" ... )