python - Google OAuth 客户端使用 json 文件中的错误 project_id - Python
问题描述
我的 Python (3.6.7) 代码使用 oauth2client 来访问 Google Photos API。它成功地进行了身份验证,但是当它尝试访问 Google 相册时,它似乎使用用户名作为 project_id。
from __future__ import print_function
from apiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
# Setup the Photo v1 API
SCOPES = 'https://www.googleapis.com/auth/photoslibrary.readonly'
store = file.Storage('credentials.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('scripts/client_id.json', SCOPES)
creds = tools.run_flow(flow, store)
service = build('photoslibrary', 'v1', http=creds.authorize(Http()))
# Call the Photo v1 API
results = service.albums().list(
pageSize=10, fields="nextPageToken,albums(id,title)").execute()
items = results.get('albums', [])
if not items:
print('No albums found.')
else:
print('Albums:')
for item in items:
print('{0} ({1})'.format(item['title'].encode('utf8'), item['id']))
执行上述代码时,它会提示我身份验证页面。当我成功进行身份验证时,它向我显示以下错误:
请求 {URL} 时出现 HttpError 403 返回“照片库 API 之前未在项目123456中使用或已禁用。通过访问https://console.developers.google.com/apis/api/photoslibrary.googleapis.com启用它/overview?project= 123456然后重试。如果您最近启用了此 API,请等待几分钟让该操作传播到我们的系统并重试。">
有趣的是,加粗的数字123456(明显变了)实际上是在 client_id.json 中找到的 client_id 的第一部分
但 project_id 看起来像这样:test1-235515
所以我从这个错误中得到的是oauth2client客户端传递的是client_id而不是project_id。因此,即使我启用了 Photos API,它也永远无法正确访问它。
请帮助解决此错误。如何手动更改 project_id?
解决方案
项目 ID 与项目编号不同。您将能够在您的 Google Cloud Console 配置中看到这两者。有关如何识别您的项目的更多信息,请参阅此文档 [1]。
单个 Google Cloud 项目可以配置许多不同的 OAuth 客户端 ID。有关创建 OAuth 客户端凭据 [2] 的信息,请参阅此文档。您只需确保您创建的客户端属于您已启用 API 的项目。转到错误消息中提供的 URL 应该会将您带到正确的配置页面。
[1] https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects
推荐阅读
- ruby-on-rails - 如果从外部路由,Rails 5 会清除会话变量
- shell - 从终端/C++ 程序启动时的不同 Python 版本
- php - Laravel 8 Google 和 Facebook 通过回调 URL 中的社交名流错误登录。错误太多重定向
- adfs - ADFS 将 wtrealm/wres 参数添加到声明提供程序的注销调用
- python - 在二分搜索中,为什么 mid = (left + (right - left)) // 2 比 mid = (left + right) // 2 好?
- python - 我如何在python中多次处理值错误异常
- javascript - 如何为几个单词的文本转换例外
- c++ - 我是否在 C++ 中正确实现了欧拉方法?
- apache-kafka - 在 Gatling Kafka 插件中 60000 毫秒后,元数据中不存在主题
- javascript - 如何从单独的组件重新加载/刷新组件