在向 GitHub API 发出身份验证请求时,应用程序通常需要获取当前用户的存储库和组织。在本指南中,我们将解释如何可靠地发现这些资源。
为了与 GitHub API 交互,我们将使用 Octokit.rb。您可以在 platform-samples 存储库中找到此项目的完整源代码。
入门
如果您还没有,您应该在查看以下示例之前阅读“身份验证基础”指南。以下示例假设您已 注册了 OAuth 应用程序,并且您的 应用程序拥有用户的 OAuth 令牌。
发现您的应用程序可以访问的用户存储库
除了拥有自己的个人存储库外,用户还可以是其他用户和组织拥有的存储库的合作者。总的来说,这些是用户拥有特权访问权限的存储库:要么是用户具有读写访问权限的私有存储库,要么是用户具有写访问权限的公共存储库。
OAuth 范围 和 组织应用程序策略 决定了您的应用程序可以为用户访问哪些存储库。使用以下工作流程来发现这些存储库。
和往常一样,首先我们需要GitHub 的 Octokit.rb Ruby 库。然后,我们将配置 Octokit.rb 自动为我们处理分页。有关分页的更多信息,请参阅“在 REST API 中使用分页”。
require 'octokit'
Octokit.auto_paginate = true
接下来,我们将传入我们应用程序的给定用户的 OAuth 令牌
# !!! 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"]
然后,我们就可以获取我们的应用程序可以为用户访问的存储库
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
发现您的应用程序可以为用户访问的组织
应用程序可以为用户执行各种与组织相关的任务。要执行这些任务,应用程序需要具有足够权限的OAuth 授权。例如,read:org
范围允许您列出团队,而 user
范围允许您公开用户的组织成员资格。一旦用户向您的应用程序授予了其中一个或多个范围,您就可以获取用户的组织。
就像我们在上面发现存储库时所做的那样,我们将从要求GitHub 的 Octokit.rb Ruby 库并将其配置为为我们处理分页开始。有关分页的更多信息,请参阅“在 REST API 中使用分页”。
require 'octokit'
Octokit.auto_paginate = true
接下来,我们将传入我们应用程序的给定用户的 OAuth 令牌 来初始化我们的 API 客户端
# !!! 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"]
然后,我们可以列出我们的应用程序可以为用户访问的组织
client.organizations.each do |organization|
puts "User belongs to the #{organization[:login]} organization."
end
返回用户的所有组织成员资格
如果您已经通读了文档,您可能已经注意到一个用于列出用户公开组织成员资格的 API 方法。大多数应用程序应该避免使用此 API 方法。此方法仅返回用户的公开组织成员资格,而不是其私有组织成员资格。
作为一个应用程序,您通常需要您的应用程序有权访问的所有用户的组织。上面的工作流程将为您提供确切的内容。