6

在具有repo用户授权范围的 GitHub API v3 中,我可以使用GET /user/orgs( https://developer.github.com/v3/orgs/#list-organizations-for-the-authenticated-user和 Octokit REST JS 获取我的组织,octokit.orgs.listForAuthenticatedUser()) 并为每个组织获取我可以访问的存储库GET /orgs/:org/reposhttps://developer.github.com/v3/repos/#list-organization-repositories,使用 Octokit,octokit.repos.listForOrg({ org: orgs.data[i].login }))。

但是,使用相同的身份验证范围(用户和存储库),运行此 Graphql 查询

query getOrgsRepos {
  viewer {
    organizations(first: 10) {
      nodes {
        repositories(first: 10) {
          nodes {
            name
          }
        }
      }
    }
  }
}

退货

{
  "data": {
    "viewer": {
      "organizations": {
        "nodes": []
      }
    }
  }
}

Graphql Explorer 结果(https://developer.github.com/v4/explorer/),但在我的 JS authed(用户repo范围)应用程序上运行返回相同的空结果

如何在 API v4 中具有相同的行为,而无需提供进一步的权限

4

2 回答 2

1

我今天刚遇到这个问题。不幸的是,截至本答案底部显示的时间戳,GitHub 的 GraphQL API 与其 REST API 不相上下。以下查询只会产生查看者的公共组织,即未经身份验证的会话将显示在其 github.com 个人资料中“组织”下的列表中。

query getOrgs {
  viewer {
    organizations(first: 100) {
      totalCount
      nodes {
        name
      }
    }
  }
}

并且在他们的 GraphQL 模式中没有等价物,octokit.orgs.listForAuthenticatedUser()它基本上获取 REST 端点,/user/orgs来列出经过身份验证的用户的组织。从文档

/user/orgs 仅列出您的授权允许您以某种方式操作的组织(例如,您可以列出具有 read:org 范围的团队,您可以使用用户范围公开您的组织成员资格等)。因此,此 API 至少需要 user 或 read:org 范围。范围不足的 OAuth 请求会收到 403 Forbidden 响应。

换句话说,使用具有足够范围的个人访问令牌,返回您的组织页面/user/orgs上显示的相同列表。如果您使用 OAuth 访问令牌进行身份验证,则该列表与您的 OAuth 应用程序的用户授权 OAuth 应用程序页面上的“组织访问”下显示的几乎相同。

于 2021-11-10T04:35:35.330 回答
0

我认为您的查询在缺少组织方面存在问题login

query getOrgsRepos {
  viewer {
    organizations(first: 10) {
      nodes {
        login
        repositories(first: 10) {
          nodes {
            name
          }
        }
      }
    }
  }
}

我只收到那些范围的响应。

于 2021-09-11T20:37:19.633 回答