當(dāng)發(fā)出經(jīng)過認(rèn)證的請求給 GitHub API 時,應(yīng)用程序通常會需要獲取當(dāng)前用戶的存儲庫和組織。這個指南會向您解釋如何可靠地發(fā)現(xiàn)這類資源。
要和 GitHub API 互動,我們將使用 Octokit.rb。您可以在platform-samples存儲庫中找到這個示例項目的完整源代碼。
您應(yīng)該先閱讀認(rèn)證基礎(chǔ)指南(如果您還沒有的話),再來嘗試本指南所提供的示例。下面的示例默認(rèn)您已經(jīng)注冊了一個 OAuth 應(yīng)用程序并且該程序有一個為用戶提供的 OAuth 令牌。
除了擁有自己的個人存儲庫之外,一個用戶還可能是其他用戶或組織的存儲庫的一個合作者??偠灾瑒偛盘岬降亩际怯脩魮碛性L問特權(quán)的存儲庫,要不就是用戶擁有讀寫權(quán)限的私人存儲庫,要不就是用戶擁有寫權(quán)限的公共存儲庫。
OAuth 域和組織應(yīng)用策略會決定哪些存儲庫可以通過您的應(yīng)用讓用戶訪問。使用下面的工作流來發(fā)現(xiàn)這些存儲庫。
和往常一樣,我們會 require GitHub 的 Octokit.rb Ruby 庫。然后將其配置為自動為我們處理分頁。
require 'octokit'
Octokit.auto_paginate = true
接下來,我們選擇加入列出存儲庫的 API 的未來改進(jìn)存儲庫。并設(shè)置媒體類別讓我們得以訪問那個功能。
language-ruby
Octokit.default_media_type = "application/vnd.github.moondragon+json"
現(xiàn)在,將我們應(yīng)用程序的指定用戶的 OAuth 令牌傳過去:
# 在真正的應(yīng)用內(nèi)永遠(yuǎn)不要用硬編碼把值寫死 !
# 而是設(shè)置環(huán)境變量并測試,和下例所示
client = Octokit::Client.new :access_token => ENV["OAUTH_ACCESS_TOKEN"]
接下來,我們就可以獲取應(yīng)用程序可以為用戶獲取的存儲庫了:
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
應(yīng)用程序可以為用戶開展一系列組織相關(guān)的任務(wù)。要開展這些任務(wù),程序需要一個OAuth 認(rèn)證和足夠的權(quán)限。舉例來說, read:org
域允許您列出隊伍,而 user
域則可以讓你公布用戶的組織會員身份。 當(dāng)一個用戶授予一個或多個這樣的域給你的應(yīng)用程序時,你就可以獲取該用戶的組織信息了。
就和我們發(fā)現(xiàn)存儲庫一樣,我們還是從 require GitHub’s Octokit.rb Ruby庫開始,并將其設(shè)置為為我們自動操作分頁:
require 'octokit'
Octokit.auto_paginate = true
接下來,我們會加入列出組織信息的 API 的未來改進(jìn)存儲庫。并設(shè)置媒體類別讓我們得以訪問那個功能。
Octokit.default_media_type = "application/vnd.github.moondragon+json"
現(xiàn)在,將我們應(yīng)用程序的指定用戶的 OAuth 令牌傳過去,來初始化我們的 API 客戶端:
# 在真正的應(yīng)用內(nèi)永遠(yuǎn)不要用硬編碼把值寫死 !
# 而是設(shè)置環(huán)境變量并測試,和下例所示
client = Octokit::Client.new :access_token => ENV["OAUTH_ACCESS_TOKEN"]
然后,我們可以列出應(yīng)用程序可以為用戶訪問的組織了:
client.organizations.each do |organization|
puts "User belongs to the #{organization[:login]} organization."
end
如果你完整閱讀了文檔,也許會已經(jīng)發(fā)現(xiàn)一個列出用戶公共組織會員身份的 API 方法。大多數(shù)應(yīng)用程序應(yīng)該避開這個 API 方法。因為這個方法只返回用戶的公共組織會員身份,不包括私人組織會員身份。
作為一個應(yīng)用程序,你通常會希望用戶加入的所有組織(包括公共的和私人的)都能授權(quán)給你的應(yīng)用程序訪問。而本文所描述的工作流正是讓你實現(xiàn)初衷的。