Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么github3.py两次要求第二个身份验证因子?_Python_Two Factor Authentication_Github3.py - Fatal编程技术网

Python 为什么github3.py两次要求第二个身份验证因子?

Python 为什么github3.py两次要求第二个身份验证因子?,python,two-factor-authentication,github3.py,Python,Two Factor Authentication,Github3.py,我正在使用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

我正在使用
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)
导入操作系统
进口GITUB3
USER=os.environ['GITHUB\u USERNAME']
PASS=os.environ['GITHUB\u PASSWORD']
尝试:
#Python 2
提示符=原始输入
除名称错误外:
#Python 3
提示=输入
def get_second_factor():
打印(“被调用的验证器”)
代码=“”
虽然不是代码:
#用户可能会在准备就绪之前意外按下Enter键
代码=提示('输入2FA代码:')
打印(“接收代码:”,代码)
返回码
gh=github3.login(用户,通过,两个因素\回调=获取\第二个因素)
org=gh.organization(“”)
对于org.iter_repos(type=“all”)中的回购:
打印(repo.ssh\u url)
不幸的是,调用
github3.login
似乎不仅触发了对第二个因素的请求,而且调用
org.iter\u repos
还触发了第二个请求


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

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


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

简单的回答是,为了避免输入第二因素代码,您可以通过访问网站上的设置来创建“个人访问令牌”。当您有了它,您可以将它作为
令牌
参数传递给
github3.login


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

谢谢,我给它一个tryExcellent-无需提供用户名和密码谢谢,我给它一个tryExcellent-无需提供用户名和密码