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?

Foi útil?

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" ... )
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top