Почему 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, мы получаем конкретный ответ, который является проблемой. Когда это происходит, мы повторяем запрос с указанным вами токеном. Поэтому, чтобы избежать необходимости вводить это несколько раз, вам необходимо использовать токен личного доступа.

Другие вопросы по тегам