跳至主要内容

发现用户的资源

了解如何以可靠的方式查找您的应用可以为用户访问的仓库和组织,以便您的身份验证请求可以访问 REST API。

在向 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 方法。此方法仅返回用户的公共组织成员身份,而不是其私有组织成员身份。

作为应用程序,您通常希望获取您的应用有权访问的所有用户的组织。上述工作流程将为您提供这些信息。