Usando Omniauth, come posso vedere i repository di un utente che accede a GitHub?
-
20-12-2019 - |
Domanda
Ho configurato Omniauth sulla mia applicazione per consentire all'utente di accedere utilizzando GitHub.
Questa parte funziona bene.
Ora, vorrei elencare i repository di quell'utente (richiedo l'ambito repo
quando chiede all'utente di autorizzare la mia app.
Ho fatto molto googling, ma non capisco come farlo.
Qualcuno può dirmi come posso utilizzare l'autenticazione esistente per elencare i repository del mio utente?
Soluzione
Bene, Omniauth è solo una biblioteca di autenticazione flessibile.Il suo unico scopo è quello di autenticare gli utenti.Qualsiasi comportamento personalizzato che desideri deve essere implementato da te o da un altro gemma.
Puoi ottenere ciò che desideri semplicemente usando API documentata di 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 questo è tutto ciò di cui hai bisogno, quindi con tutti i mezzi, usalo.Se hai altri requisiti oltre a questo, forse dovresti dare un'occhiata a Gem . .
Inoltre, è necessario utilizzare solo l'ambito repo
se si desidera accedere ai repositori privati dei propri utenti.E richiedere l'accesso ai repositori privati di un utente è un po 'invadente, quindi non farlo leggermente.
Se vuoi davvero accedere ai reposti privati di un utente, devi aggiungere ?type=all
alla fine del repos_url.Quindi dovresti fare qualcosa come:
open("#{omniauth.extra.raw_info.repos_url}?type=all" ... )
.