鍍金池/ 教程/ Java/ 探索用戶資源
集成自動化部署
架設(shè) CI 服務(wù)器
探索用戶資源
SSH agent 轉(zhuǎn)發(fā)
使用評論
身份認證基礎(chǔ)
管理部署密鑰
準(zhǔn)備開始
傳遞部署
遍歷分頁
整合者的最佳做法
數(shù)據(jù)渲染成圖表

探索用戶資源

當(dāng)發(fā)出經(jīng)過認證的請求給 GitHub API 時,應(yīng)用程序通常會需要獲取當(dāng)前用戶的存儲庫和組織。這個指南會向您解釋如何可靠地發(fā)現(xiàn)這類資源。

要和 GitHub API 互動,我們將使用 Octokit.rb。您可以在platform-samples存儲庫中找到這個示例項目的完整源代碼。

準(zhǔn)備開始

您應(yīng)該先閱讀認證基礎(chǔ)指南(如果您還沒有的話),再來嘗試本指南所提供的示例。下面的示例默認您已經(jīng)注冊了一個 OAuth 應(yīng)用程序并且該程序有一個為用戶提供的 OAuth 令牌。

探索應(yīng)用程序可讓用戶訪問的存儲庫

除了擁有自己的個人存儲庫之外,一個用戶還可能是其他用戶或組織的存儲庫的一個合作者??偠灾瑒偛盘岬降亩际怯脩魮碛性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 的未來改進存儲庫。并設(shè)置媒體類別讓我們得以訪問那個功能。

    language-ruby
    Octokit.default_media_type = "application/vnd.github.moondragon+json"

現(xiàn)在,將我們應(yīng)用程序的指定用戶的 OAuth 令牌傳過去:

    # 在真正的應(yīng)用內(nèi)永遠不要用硬編碼把值寫死 !
    # 而是設(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)用程序可讓用戶訪問的組織

應(yīng)用程序可以為用戶開展一系列組織相關(guān)的任務(wù)。要開展這些任務(wù),程序需要一個OAuth 認證和足夠的權(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 的未來改進存儲庫。并設(shè)置媒體類別讓我們得以訪問那個功能。

    Octokit.default_media_type = "application/vnd.github.moondragon+json"

現(xiàn)在,將我們應(yīng)用程序的指定用戶的 OAuth 令牌傳過去,來初始化我們的 API 客戶端:

    # 在真正的應(yīng)用內(nèi)永遠不要用硬編碼把值寫死 !
    # 而是設(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

不要依賴公共組織 API

如果你完整閱讀了文檔,也許會已經(jīng)發(fā)現(xiàn)一個列出用戶公共組織會員身份的 API 方法。大多數(shù)應(yīng)用程序應(yīng)該避開這個 API 方法。因為這個方法只返回用戶的公共組織會員身份,不包括私人組織會員身份。

作為一個應(yīng)用程序,你通常會希望用戶加入的所有組織(包括公共的和私人的)都能授權(quán)給你的應(yīng)用程序訪問。而本文所描述的工作流正是讓你實現(xiàn)初衷的。