5

在 Google Colab 笔记本中,我正在运行一段代码,这需要几个小时才能完成,最后一个文件将上传到我的 Google 驱动器。

问题是有时我的凭据会在代码上传文件之前过期。我环顾四周,可能发现了一些可以刷新我的凭据的代码,但我不是 100% 熟悉 Pydrive 的工作原理以及这段代码到底在做什么。

这是到目前为止我用来设置我的笔记本以访问我的 Google Drive 的代码。

!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() 和 Refresh Token Issues

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()条线会阻止我的凭据过期?

4

1 回答 1

2

当用户验证您的应用程序时。您将获得一个访问令牌和一个刷新令牌。

访问令牌用于访问 Google API。如果您需要访问用户拥有的私人数据,例如他们的谷歌驱动器帐户,您需要获得他们的访问权限。访问令牌的诀窍是它们的寿命很短,可以工作一个小时。一旦访问令牌过期,它将不再起作用,这就是刷新令牌发挥作用的地方。

只要用户不同意您的应用程序通过他们的谷歌帐户访问他们的数据,大部分刷新令牌就不会过期,您可以使用刷新令牌来请求新的访问令牌。

这就像elif gauth.access_token_expired:检查访问令牌是否已过期或可能即将过期。如果是,那么gauth.Refresh()将刷新它。只要确保你get_refresh_token: True有一个刷新令牌

我有点惊讶图书馆没有自动为你做这件事。但我不熟悉 Pydrive。Google APIs Python 客户端库会自动为您刷新访问令牌。

于 2018-07-19T07:28:25.633 回答