使用 Octokit 从 Github 列出所有组织

Posted

技术标签:

【中文标题】使用 Octokit 从 Github 列出所有组织【英文标题】:List all organizations form Github using Octokit 【发布时间】:2018-04-11 13:44:55 【问题描述】:

在我的 Rails 应用程序中,我想列出用户的组织及其存储库。我正在使用 omniauth-github 向 Github 进行身份验证,所以一旦我从 Github 获得令牌,我就会这样做:

client = Octokit::Client.new(:access_token => token)
client.orgs

在omniauth.rb中

provider :github, ENV['GITHUB_CLIENT_ID'], ENV['GITHUB_CLIENT_SECRET']

它抛出一个错误 GET https://api.github.com/user/orgs: 403 - You need at least read:org scope or user scope to list your organizations. // See: https://developer.github.com/v3/orgs/#list-your-organizations

所以我将它添加到初始化程序并重新启动服务器:

provider :github, ENV['GITHUB_CLIENT_ID'], ENV['GITHUB_CLIENT_SECRET'], scope: 'read:org'

但我得到了同样的错误。

我也尝试在 Octokit 客户端中提供范围:

client.create_authorization(:idempotent => true, :client_id => 'xxxx', :client_secret => 'yyyy', :scopes => ["read:org"])

但我收到一条消息,这里只允许基本身份验证。

我想问你,我在这里错过了什么?

【问题讨论】:

您确定您已对您的应用使用的 OAuth 令牌设置了正确的读取权限吗? (github.com/settings/developers) 我已将所有内容设置为只读,因此我应该可以访问它,但我收到 403 错误消息。还有其他想法吗? 【参考方案1】:

经过深入调查,我发现获取组织需要基本身份验证(用户名和密码)或OAuth token,因此我创建了一个令牌,现在它可以正常工作了。

【讨论】:

【参考方案2】:

您可能在未授予范围“read:org”权限的情况下登录。您可能想尝试重新登录,看看是否需要为新添加的范围授予权限。很可能是 Rails/tokens 中的数据库与 GitHub OAuth 流程不匹配。

【讨论】:

我已经尝试注销,在我的应用程序中再次进行身份验证,但我得到了同样的错误。我不将令牌存储在我的数据库中,因为我认为它们不是持久的会话。

以上是关于使用 Octokit 从 Github 列出所有组织的主要内容,如果未能解决你的问题,请参考以下文章

Rails 6 如何使用 Octokit 从 Github 文件获取中处理 404

使用 Octokit (c#, .net) 从大型 github 企业存储库中高效下载单个文件

Octokit 返回一个拉取请求而不是所有问题

使用 Octokit.rb 输出 repos URL

使用 Octokit 或 GitHub Rest API 上传多个文件

使用 @octokit 对 Github 应用程序进行身份验证