使用pygithub登录时出现的问题

8
我们正在尝试使用pygithub登录我们的GitHub服务器,如下所示。请注意,“token_bla_bla”是我们在GitHub为该用户生成的令牌。
g = Github(login_or_token='token_bla_bla', base_url='https://github.company.com')

我们尝试获取用户对象并通过以下方式打印:
u = g.get_user()

print u

但我们打印出的是 AuthenticatedUser(login=None)

是否有人知道如何解决此问题,以便我们可以登录,从而在公司服务器上创建和使用存储库?

提前致谢 :)


这意味着你没有登录... - pjpj
你填写了正确的参数,例如密码吗? - pjpj
5个回答

7

遇到了同样的问题,经过查看源代码后,我发现正确的base_url应该附加API v3端点,而不仅仅是Github.com实例的URL。

即,正确实例化客户端的方法应该是:

g = Github(login_or_token='token_bla_bla', base_url='https://github.company.com/api/v3')

在此之后,您将能够对用户进行身份验证,但请注意身份验证是延迟的,这意味着仅当您请求用户的属性时才会发生身份验证。因此,如果您在client.get_user()方法之后立即打印用户,您仍将获得一个具有登录为None的AuthenticatedUser实例。但是,如果您直接访问user.login属性,则会调用/ user API请求并加载参数时采用延迟加载。
总结一下:
# create the GH client correctly
g = Github(login_or_token='token_bla_bla', base_url='https://github.company.com/api/v3')
# create an instance of an AuthenticatedUser, still without actually logging in
user = g.get_user()
print(user) # will print 'AuthenticatedUser(login=None)'
# now, invoke the lazy-loading of the user
login = user.login
print(user) # will print 'AuthenticatedUser(login=<username_of_logged_in_user>)'
print(login) # will print <username_of_logged_in_user>

你做得很好,甚至连pygithub文档都没有提到这一点。 - Sachin Shukla

1
您需要将 Github 用户名传递给 get_user() 函数,以获取 NamedUser 对象。类似于以下内容:
$ user = get_user('my-github-username')

预期输出应为:
$ print(user)
NamedUser(login="my-github-username")

如果您的令牌存在任何问题,调用参数化函数时会引发BadCredentialException异常。在非参数化函数调用的情况下,不会引发任何异常。

1

有3种不同的方式可以登录GitHub服务器

以下是登录GitHub的3种不同方式:

使用用户名和密码

g = Github("user", "password")

或使用访问令牌

g = Github("access_token")

Github Enterprise自定义主机名

g = Github(base_url="https://{hostname}/api/v3", login_or_token="access_token")

不要忘记导入下面的模块 从Github import Github

回答你的问题: 如果您没有使用GitHub企业版,您可以使用以下方法登录

使用用户名和密码

g = Github("user", "password")

或者使用访问令牌。
g = Github("access_token")

对于企业版 Github:

g = Github(base_url="https://{hostname}/api/v3", login_or_token="access_token")
u = g.get_user()
print(u)

在您的情况下,您已经提到了登录网址为:

g = Github(login_or_token='token_bla_bla', base_url='https://github.company.com')

请尝试使用以下方式登录:

g = Github(base_url="https://github.company.com/api/v3", login_or_token="access_token")

0

遇到了同样的问题。通过解码令牌来解决它。应该使用模块base64和simplecrypt。


-1

有三种不同的方式可以登录,如此处所述:

g = Github("user", "password")
g = Github("access_token")
g = Github(base_url="https://{hostname}/api/v3", login_or_token="access_token")

据我所见,您使用了最后一个但翻转了参数。首先尝试使用base_url,然后再尝试其他两种方法,如果这不起作用。

1
Python在使用kwargs时不关心参数的顺序,就像OP所做的那样。 - Chaos Monkey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接