Pydrive: предотвращение истечения срока действия авторизации Google Диска.

В блокноте Google Colab я запускаю блок кода, выполнение которого займет несколько часов, а в конце файл будет загружен на мой диск Google.

Проблема в том, что иногда срок действия моих учетных данных истекает до того, как код сможет загрузить файл. Я осмотрелся и, возможно, нашел какой-то код, который, возможно, может обновить мои учетные данные, но я не на 100% знаком с тем, как работает Pydrive и что именно делает этот код.

Вот код, который я использую до сих пор, чтобы настроить свой ноутбук для доступа к моему Google Диску.

!pip install -U -q PyDrive

from google.colab import files
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials

auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)

И этот код я использую для загрузки файла

uploadModel = drive.CreateFile()
uploadModel.SetContentFile('filename.file')
uploadModel.Upload()

Это код, который я нашел, который может решить мою проблему (найден здесь PyDrive guath.Refresh () и Проблемы с токеном обновления)

if gauth.credentials is None:
    # Authenticate if they're not there
    gauth.LocalWebserverAuth()
elif gauth.access_token_expired:
    # Refresh them if expired
    print "Google Drive Token Expired, Refreshing"
    gauth.Refresh()
else:
    # Initialize the saved creds
    gauth.Authorize()
# Save the current credentials to a file
gauth.SaveCredentialsFile("GoogleDriveCredentials.txt")

Итак, я предполагаю, что строка gauth.Refresh() предотвращает истечение срока действия моих учетных данных?


person SantoshGupta7    schedule 19.07.2018    source источник


Ответы (1)


Когда пользователь аутентифицирует ваше приложение. Вам предоставляется токен доступа и токен обновления.

Токены доступа используются для доступа к API Google. Если вам нужно получить доступ к личным данным, принадлежащим пользователю, например, к его учетной записи Google Drive, вам необходимо их разрешение на доступ к ним. Трюк с токенами доступа в том, что они недолговечны, они работают в течение часа. По истечении срока действия токена доступа он больше не будет работать, и именно здесь вступает в игру токен обновления.

Срок действия токенов обновления по большей части не истекает, пока пользователь не удалит ваше согласие на доступ вашего приложения к его данным, хотя в своей учетной записи Google вы можете использовать токен обновления для запроса нового токена доступа.

Это как elif gauth.access_token_expired: проверяет, истек ли срок действия токена доступа или, возможно, скоро истечет. Если да, то gauth.Refresh() обновит его. Просто убедитесь, что у вас есть get_refresh_token: True, чтобы у вас был токен обновления

Я немного удивлен, что библиотека не делает это за вас автоматически. Но я не знаком с Pydrive. клиентская библиотека Google API Python автоматически обновляет токен доступа.

person DaImTo    schedule 19.07.2018
comment
Просто убедитесь, что у вас есть get_refresh_token: True, чтобы у вас был токен обновления. Я только что посмотрел это. В файле yaml? Или есть способ сделать это прямо в питоне. «Я немного удивлен, что библиотека не делает это за вас автоматически. Но я не знаком с Pydrive. Думаю, это могло происходить из-за того, что иногда срок действия учетных данных не истекает более часа, а иногда и до 4 часов. Это может быть случай, когда код загружается более часа, прежде чем что-либо загрузить. - person SantoshGupta7; 19.07.2018
comment
Любое обновление по этому поводу? кусок кода, который работает, чтобы получить правильное обновление? - person agenis; 16.01.2021
comment
тоже ищу решение - person Leonardo Rick; 18.03.2021