Beim Erstellen authentifizierter Anforderungen an die GitHub-API müssen Anwendungen häufig die Repositorys und Organisationen des aktuellen Benutzers abrufen. In diesem Leitfaden wird erläutert, wie diese Ressourcen zuverlässig entdeckt werden.
Um mit der GitHub-API zu interagieren, verwenden wir Octokit.rb. Den vollständigen Quellcode für dieses Projekt findest du im Repository platform-samples.
Erste Schritte
Falls du es noch nicht getan hast, solltest du den Leitfaden „Grundlagen der Authentifizierung“ lesen, bevor du die folgenden Beispiele durcharbeitest. In den folgenden Beispielen wird davon ausgegangen, dass du eine OAuth app registriert hast und dass deine Anwendung über ein OAuth-Token für einen Benutzerin verfügt.
Entdecken der Repositorys, auf die deine App für einen Benutzer zugreifen kann
Zusätzlich zu seinen eigenen persönlichen Repositorys kann ein Benutzer ein Mitarbeiter im Besitz anderer Benutzer und Organisationen sein. Dies sind die Repositorys, in denen der Benutzer privilegierten Zugriff hat: entweder ein privates Repository, in dem der Benutzer Lese- oder Schreibzugriff hat, oder ein öffentliches Repository, in dem der Benutzer Schreibzugriff hat.
OAuth-Bereiche und Organisationsanwendungsrichtlinien bestimmen, auf welche dieser Repositorys deine App für einen Benutzer zugreifen kann. Verwende den folgenden Workflow, um diese Repositorys zu entdecken.
Wie immer wird zuerst die Ruby-Bibliothek GitHub Octokit.rb benötigt. Anschließend konfigurieren wir Octokit.rb, um die Paginierung für uns automatisch handzuhaben. Weitere Informationen zur Paginierung findest du unter Verwenden der Paginierung in der REST-API.
require 'octokit'
Octokit.auto_paginate = true
Als Nächstes übergeben wir das OAuth-Token unserer Anwendung für einen bestimmten Benutzer:
# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below.
client = Octokit::Client.new :access_token => ENV["OAUTH_ACCESS_TOKEN"]
Dann sind wir bereit, die Repositorys abzurufen, auf die unsere Anwendung für den Benutzer zugreifen kann:
client.repositories.each do |repository|
full_name = repository[:full_name]
has_push_access = repository[:permissions][:push]
access_type = if has_push_access
"write"
else
"read-only"
end
puts "User has #{access_type} access to #{full_name}."
end
Entdecken der Organisationen, auf die deine App für einen Benutzer zugreifen kann
Anwendungen können alle Arten von organisationsbezogenen Aufgaben für einen Benutzer ausführen. Um diese Aufgaben auszuführen, benötigt die App eine OAuth-Autorisierung mit ausreichender Berechtigung. Der Bereich read:org
ermöglicht es Dir beispielsweise, Teams auflisten zu können, und der Bereich user
ermöglicht es Dir, die Mitgliedschaft des Benutzers zu veröffentlichen. Sobald ein Benutzer deiner App einen oder mehrere dieser Bereiche zugewiesen hat, kannst du die Organisationen des Benutzers abrufen.
Genau wie bei der Erkennung von Repositories (siehe oben) benötigen wir zunächst die GitHub-Ruby-Bibliothek Octokit.rb und konfigurieren sie so, dass sie die Paginierung für uns übernimmt. Weitere Informationen zur Paginierung findest du unter Verwenden der Paginierung in der REST-API.
require 'octokit'
Octokit.auto_paginate = true
Als Nächstes übergeben wir das OAuth-Token unserer Anwendung für einen bestimmten Benutzer, um unseren API-Client zu initialisieren:
# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below.
client = Octokit::Client.new :access_token => ENV["OAUTH_ACCESS_TOKEN"]
Anschließend können wir die Organisationen auflisten, auf die unsere Anwendung für den Benutzer zugreifen kann:
client.organizations.each do |organization|
puts "User belongs to the #{organization[:login]} organization."
end
Zurückgeben aller Organisationsmitgliedschaften des Benutzers
Wenn du die Dokumente von vorne bis hinten gelesen hast, hast du möglicherweise eine API-Methode für die Auflistung der Mitgliedschaften der öffentlichen Organisation eines Benutzers bemerkt. Die meisten Anwendungen sollten diese API-Methode vermeiden. Diese Methode gibt nur die Mitgliedschaften der öffentlichen Organisation des Benutzers zurück, nicht seine privaten Organisationsmitgliedschaften.
Als Anwendung möchtest du in der Regel alle Organisationen des Benutzers haben, auf die deine Anwendung zugreifen darf. Der oben genannte Workflow gibt Dir genau das.