google.oauth2 尝试打开电子表格时出现“响应中没有访问令牌”错误

问题描述 投票:0回答:2

我试图通过 gspread 打开谷歌电子表格,但我的代码失败并出现错误:

Traceback (most recent call last):
  File "/home/memcpy/.local/lib/python3.6/site-packages/google/oauth2/_client.py", line 156, in jwt_grant
    access_token = response_data["access_token"]
KeyError: 'access_token'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "email_sender.py", line 20, in <module>
    fetch_users()
  File "email_sender.py", line 16, in fetch_users
    sheet = client.open('some')

  some more tracebacks....

  File "/home/memcpy/.local/lib/python3.6/site-packages/google/auth/transport/requests.py", line 444, in request
    self.credentials.before_request(auth_request, method, url, request_headers)
  File "/home/memcpy/.local/lib/python3.6/site-packages/google/auth/credentials.py", line 133, in before_request
    self.refresh(request)
  File "/home/memcpy/.local/lib/python3.6/site-packages/google/oauth2/service_account.py", line 359, in refresh
    access_token, expiry, _ = _client.jwt_grant(request, self._token_uri, assertion)
  File "/home/memcpy/.local/lib/python3.6/site-packages/google/oauth2/_client.py", line 159, in jwt_grant
    six.raise_from(new_exc, caught_exc)
  File "<string>", line 3, in raise_from
google.auth.exceptions.RefreshError: ('No access token in response.', {'id_token': 'there was some token so I hided it'})

我尝试用谷歌搜索该错误,但没有找到任何相关信息。这是我的代码:

import gspread
from google.oauth2.service_account import Credentials

scope = [
    'https://googleapis.com/auth/drive',
    'https://googleapis.com/auth/spreadsheets'
]

creds = Credentials.from_service_account_file('creds.json', scopes=scope)
client = gspread.authorize(creds)
sheet = client.open('some')
python oauth-2.0 gspread
2个回答
5
投票

我按照此处链接的教程进行操作:https://www.youtube.com/watch?v=cnPlKLEGR7E&list=PLdu6wGxXWFgX9XlahY9gHEMdZ7CL5CHMY&index=5&ab_channel=TechWithTim

确保范围变量被正确定义并作为如下列表:

scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive"]

3
投票

在列表中传递

scope
值而不是字符串变量:

scope = ['https://www.googleapis.com/auth/realtime-bidding']

这解决了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.