Avec Omniauth, comment puis-je voir les référentiels d'un utilisateur qui se connecte avec Github ?

StackOverflow https://stackoverflow.com//questions/24004142

Question

J'ai configuré Omniauth sur mon application Rails 4 pour permettre à un utilisateur de se connecter à l'aide de Github.

Cette partie fonctionne bien.

Maintenant, je voudrais lister les référentiels de cet utilisateur (je demande la portée repo lorsque je demande à l'utilisateur d'autoriser mon application.

J'ai fait beaucoup de recherches sur Google, mais je ne comprends pas comment faire ça.

Quelqu'un peut-il me dire comment utiliser l'authentification existante pour répertorier les référentiels de mon utilisateur ?

Était-ce utile?

La solution

Eh bien, OmniAuth n'est qu'une bibliothèque d'authentification flexible.Son seul objectif est d'authentifier les utilisateurs.Tout comportement personnalisé que vous désirez doit être implémenté soit par vous, soit par un autre joyau.

Vous pouvez réaliser ce que vous voulez en utilisant simplement L'API bien documentée de 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)

Si c’est tout ce dont vous avez besoin, alors utilisez-le.Si vous avez d'autres exigences que celles-ci, vous devriez peut-être jeter un œil aux joyau github.

De plus, vous ne devez utiliser que la portée repo si vous souhaitez accéder aux dépôts privés de vos utilisateurs.Et demander l’accès aux dépôts privés d’un utilisateur est un peu intrusif, alors ne le faites pas à la légère.

Si vous souhaitez vraiment accéder aux dépôts privés d'un utilisateur, vous devez ajouter ?type=all à la fin de repos_url.Il faudrait donc faire quelque chose comme :

open("#{omniauth.extra.raw_info.repos_url}?type=all" ... )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top