Почему 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 = 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 только в первый раз, когда это требуется?
1 ответ
Таким образом, короткий ответ заключается в том, что во избежание необходимости ввода кодов второго фактора вы можете создать "Личный токен доступа", зайдя в настройки на веб-сайте. Когда у вас есть это, вы можете передать это как token
параметр для github3.login
,
Длинный ответ таков: login
не называет это, но вместо этого звонит organization
а также iter_repos
запускает два запроса 2FA. На самом деле, если у вас есть более 100 репозиториев, вас попросят об этом для каждых ста репозиториев после этого. Причина в том, что GitHub API запрашивает у вас маркер второго фактора каждый раз, когда вы делаете запрос к API. Это означает, что каждый раз, когда github3.py делает запрос к API, мы получаем конкретный ответ, который является проблемой. Когда это происходит, мы повторяем запрос с указанным вами токеном. Поэтому, чтобы избежать необходимости вводить это несколько раз, вам необходимо использовать токен личного доступа.