Pydrive:防止Google云端硬盘授权过期。

时间:2018-07-19 05:20:31

标签: python google-drive-api google-oauth pydrive

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

问题在于,有时我的凭据将在代码可以上传文件之前过期。我环顾四周,可能发现了一些可以刷新我的凭据的代码,但我不是100%熟悉Pydrive的工作方式以及此代码的确切功能。

这是到目前为止我用来设置笔记本访问Google云端硬盘的代码。

AND 
(
  (:p_parameter = 'YES' and column1 <> 0) OR
  (:p_parameter = 'NO' and column1 = 0) OR
  (:p_parameter = 'ALL')
)

这是我用来上传文件的代码

!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)

这是我发现的可以解决我问题的代码(在PyDrive guath.Refresh() and Refresh Token Issues处找到)

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

所以我猜测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") 行会阻止我的凭据过期?

1 个答案:

答案 0 :(得分:1)

当用户验证您的应用程序时。系统会为您提供访问令牌和刷新令牌。

访问令牌用于访问Google API。如果您需要访问用户拥有的私人数据(例如其Google云端硬盘帐户),则需要他们的许可才能访问。访问令牌的窍门是它们寿命短,只能工作一个小时。一旦访问令牌过期,它将不再起作用,这就是刷新令牌起作用的地方。

只要用户没有通过您的Google帐户删除您对您的应用程序访问其数据的同意,您就可以使用刷新令牌来请求新的访问令牌。

类似于elif gauth.access_token_expired:的代码检查访问令牌是否已到期或可能即将到期。如果是,则gauth.Refresh()将刷新它。只要确保您拥有get_refresh_token: True,以便拥有刷新令牌

图书馆没有自动为您做这件事,我感到有些惊讶。但是我对Pydrive不熟悉。 Google APIs Python client library自动为您刷新访问令牌。