英文:
Fetching gitlab repo list : says "401 Unauthorized"
问题
我正在尝试使用OAuth令牌从GitLab获取仓库列表。
我的代码大致如下... ("github.com/xanzy/go-gitlab")
repositories := []string{}
client, _ := gitlab.NewClient(gitRepoRequest.Token, gitlab.WithBaseURL("https://gitlab.com/api/v4"))
fmt.Println("client...", client.ContainerRegistry)
projects, _, projectListErr := client.Projects.ListProjects(&gitlab.ListProjectsOptions{})
for _, project := range projects {
fmt.Println("ID===", project.ID)
fmt.Println("NAME===", project.Name)
}
if projectListErr != nil {
// 返回错误
}
我无法获取项目列表... "projectListErr" 的错误信息是...
GET https://gitlab.com/api/v4/projects: 401 {message: 401 Unauthorized}
我对令牌值很有信心,因为我使用相同的令牌获取了仓库的所有分支列表,那段代码如下... ("github.com/go-git/go-git/v5")
rem := git.NewRemote(gitMemory.NewStorage(), &gitConfig.RemoteConfig{
Name: "origin",
URLs: []string{gitBranchesRequest.Repository},
})
refs, listErr := rem.List(&git.ListOptions{
Auth: &gitHttp.BasicAuth{Username: gitUserName, Password: gitBranchesRequest.Token},
})
这是否意味着我使用的库 "github.com/xanzy/go-gitlab" 存在问题?
英文:
I am trying to get repo list from gitlab using OAuth token.
My code looks something like this ... ("github.com/xanzy/go-gitlab")
repositories := []string{}
client, _ := gitlab.NewClient(gitRepoRequest.Token, gitlab.WithBaseURL("https://gitlab.com/api/v4"))
fmt.Println("client...", client.ContainerRegistry)
projects, _, projectListErr := client.Projects.ListProjects(&gitlab.ListProjectsOptions{})
for _, project := range projects {
fmt.Println("ID===", project.ID)
fmt.Println("NAME===", project.Name)
}
if projectListErr != nil {
// return err
}
I am not able to get the project list.. the "projectListErr" says ...
GET https://gitlab.com/api/v4/projects: 401 {message: 401 Unauthorized}
I am confident about the token value because I am getting list of all branches for a repo using the same token, that code looks like ... ("github.com/go-git/go-git/v5")
rem := git.NewRemote(gitMemory.NewStorage(), &gitConfig.RemoteConfig{
Name: "origin",
URLs: []string{gitBranchesRequest.Repository},
})
refs, listErr := rem.List(&git.ListOptions{
Auth: &gitHttp.BasicAuth{Username: gitUserName, Password: gitBranchesRequest.Token},
})
Does that mean there is an issue with the library that I am using ? github.com/xanzy/go-gitlab
答案1
得分: 2
这取决于你使用的令牌类型。
例如,一个项目访问令牌可能会给你访问某个项目的所有分支的权限。
但是对于使用/projects
API,401表示身份验证信息无效或缺失。
所以请确保使用与用户关联的个人访问令牌(PAT),而不是项目访问令牌。
OP Keval Bhogayata在评论中补充道:
我找到了问题。
我使用的库("xanzy/go-gitlab")为不同的令牌创建函数提供了不同的客户端创建方式。
我一直在使用支持个人访问令牌的函数,而应该使用"NewOAuthClient"!
// NewOAuthClient返回一个新的GitLab API客户端。要使用需要身份验证的API方法,请提供有效的OAuth令牌。 func NewOAuthClient(token string, options ...ClientOptionFunc) (*Client, error)
英文:
It depends on the type of token you are using.
For instance, a project access token might very well give you access to the list of all branches for a repository (for that project).
But for using the /projects
API, 401 means the authentication information is not valid or is missing.
So make sure to use a PAT (Personal Access Token), linked to a user, not a project.
The OP Keval Bhogayata adds in the comments:
> I have found the issue.
>
> The library I am using ("xanzy/go-gitlab
"), has different client creation functions for different tokens.
>
> I have been using the function that supports personal access token. Instead I was supposed to use "NewOAuthClient
" !
>
>go
> // NewOAuthClient returns a new GitLab API client. To use API methods which
> // require authentication, provide a valid oauth token.
> func NewOAuthClient(token string, options ...ClientOptionFunc) (*Client, error)
>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论