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-无需提供用户名和密码