我正在按照以下方式初始化凭据对象,如果令牌过期,则刷新令牌。下面提到的方法。当我使用实例时,出现错误提示('invalid_grant: Token has been expired or revoked.', '{\n "error": "invalid_grant",\n "error_description": "Token has been expired or revoked."\n}')
import google.auth.transport.requests
from googleapiclient.discovery import build
import google.oauth2.credentials
from oauth2client import GOOGLE_TOKEN_URI, client
try:
self.credentials = google.oauth2.credentials.Credentials(
self.google_access_token,
refresh_token=self.google_refresh_token,
token_uri=GOOGLE_TOKEN_URI,
client_id=settings.GOOGLE_CLIENT_ID,
client_secret=settings.GOOGLE_CLIENT_SECRET)
if self.credential.expired:
request = google.auth.transport.requests.Request()
self.credentials.refresh(request)
except:
pass
self.analytics = build('analyticsreporting', 'v4', credentials=self.credentials)
请提供建议。
答案 0 :(得分:0)
您必须创建一个settings.yaml
或credentials.json
并使用它来创建刷新的访问令牌。
在该过程中,您将所有凭据(例如client_id,client_secret,范围等)放入.json
或.yaml
文件中,该文件以后将用于刷新过期的访问令牌。
语法:- google.oauth2.credentials.Credentials(from_authorized_user_file("filename.json"))
该文件能够创建新的访问令牌,并且由于它是文件,因此可以将其放置在安全的地方,以免被错误使用。 (如果其他人拥有此文件的所有权,那么他们可以向您的googleapi隐式请求)