RefreshError('invalid_grant:令牌已过期或撤销。')Google API

pro*_*uel 5 python google-api google-oauth google-api-python-client gmail-api

大约一周前,我在谷歌上设置了一个应用程序。现在,当我尝试运行时:

SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']
creds = None
if os.path.exists('token.pickle'):
     with open(self.CREDENTIALS_PATH+self.conjoiner+'token.pickle', 'rb') as token:
        creds = pickle.load(token)
        if not creds or not creds.valid:
            if creds and creds.expired and creds.refresh_token:
                creds.refresh(Request()) ##error here
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Exception has occurred: RefreshError
('invalid_grant: Token has been expired or revoked.', {'error': 'invalid_grant', 'error_description': 'Token has been expired or revoked.'})
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?

DaI*_*mTo 8

token.pickle 包含应用程序的访问令牌和刷新令牌。

令牌已过期或被撤销。”

意味着该文件中的引用令牌不再起作用,这可能是由服务器原因引起的。

  1. 用户撤销了您的访问权限
  2. 用户已授权您的访问令牌超过 50 次,这是最旧的令牌,并且已过期
  3. 刷新令牌已六个月未使用
  4. 该项目仍处于测试阶段,刷新令牌将在 7 天后过期。

以上所有信息都可以在Oauth2过期文档中找到

选项 1-3 的解决方案是简单地删除 token.pickle 文件并再次请求用户授权。

对于第四点,您应该转到 Oauth2 同意屏幕下的 Google 开发者控制台,并将您的应用程序设置为生产。然后您的刷新令牌将停止过期。然后你可以删除 token.pickle 就不会再出现这个问题了。

在此输入图像描述