python - 如果我使用带有 pydrive 的服务帐户,为什么我需要刷新令牌?
问题描述
我正在使用 pydrive 将一些文件上传到我的驱动器。我使用以下方法进行身份验证:
credentials = ServiceAccountCredentials.from_json_keyfile_name(
settings.GOOGLE_API_SERVICE_ACCOUNT, scopes
)
pydrive_auth = GoogleAuth()
pydrive_auth.credentials = credentials
drive = GoogleDrive(pydrive_auth)
....
一段时间后,显然 pydrive 尝试刷新访问令牌并尝试找到client_secret.json
我的服务器上不存在的一个,因此导致它失败。如果我使用服务帐户,为什么要尝试刷新访问令牌?我认为服务帐户不需要令牌。代码中是否缺少某些内容,或者我是否需要添加此缺少的文件?
解决方案
服务帐户不需要刷新令牌。
刷新令牌由用户授予您,这将使您能够在他们不在线时访问他们的数据。
服务帐户是预先授权的,它们始终可以访问,如果您想以这种方式查看,它们在某种程度上是永久的刷新令牌。
gauth = GoogleAuth()
scope = ['https://www.googleapis.com/auth/drive']
gauth.credentials = ServiceAccountCredentials.from_json_keyfile_name(JSON_FILE, scope)
drive = GoogleDrive(gauth)
my_file = drive.CreateFile({'id': 'FILE_ID'})
推荐阅读
- python - 匹配具有相似列的两个数据框
- php - 如何使用通配符来允许特定域 CORS?
- dependent-type - 在依赖类型的编程语言中,Type-in-Type 是否适用于编程?
- node.js - Puppeteer 在 Node 10 运行时中无法使用谷歌云功能
- c++ - Access std::variant inside lambda
- c - Problems with #define in c
- linux - I have working on rasa framework when i have deploying custom action using docker and compose the custome action
- html - 垫抽屉内容滚动无法正常工作
- java - 编写此正则表达式的更好方法
- laravel - 如何构建 Laravel 生产环境