我正在使用github3.py访问组织的Github帐户,并且我们启用了双重身份验证。我首先列出存储库。这是代码:

import os

import github3

USER = os.environ['GITHUB_USERNAME']
PASS = os.environ['GITHUB_PASSWORD']

try:
    # Python 2
    prompt = raw_input
except NameError:
    # Python 3
    prompt = input

def get_second_factor():
    print("Authenticator called")
    code = ''
    while not code:
        # The user could accidentally press Enter before being ready
        code = prompt('Enter 2FA code: ')
        print("Received code:", code)
    return code

gh = github3.login(USER, PASS, two_factor_callback=get_second_factor)

org = gh.organization("<ORGNAME>")
for repo in org.iter_repos(type="all"):
    print(repo.ssh_url)


不幸的是,似乎不仅调用github3.login会触发第二个因素的请求,而且调用org.iter_repos会触发第二个请求。

这是预期的行为吗?如何确保程序仅在需要时才尝试2FA?

最佳答案

因此,简短的答案是,为了避免需要输入第二因子代码,您可以通过访问网站上的设置来创建“个人访问令牌”。如果有,您可以将其作为token参数传递给github3.login

长答案是,调用login不会调用此函数,而是调用organizationiter_repos会触发两个2FA请求。实际上,如果您有100个以上的存储库,那么之后每100个存储库都会要求您提供它。原因是GitHub API每次您向API请求时都会提示您输入第二个因素令牌。这意味着每次github3.py向API发出请求时,我们都会收到一个特定的响应,这是一个挑战。发生这种情况时,我们将使用您输入的令牌重复该请求。因此,为了避免多次输入,您需要使用个人访问令牌。

08-26 20:56