我在弄清楚如何使用创建新的OAuth2会话并访问Gmail API的令牌时遇到麻烦。
我创建了一个使用Gmail API的应用。经过Oauth批准流程后,当令牌过期时,我为每个用户保存了他们的google user id
,access and refresh tokens
,id token
和date
。
我现在有一项任务,必须同步一些数据并访问Gmail api。
将令牌添加到OAuthSession无效。
认证会话的正确方法是什么?我阅读了所有可以找到的文档,但是找不到这个非常简单的问题的答案!
import os
from requests_oauthlib import OAuth2Session
from oauthlib.oauth2 import TokenExpiredError
def sync_gmail(user):
client_id = os.getenv('CLIENT_ID')
refresh_url = "https://www.googleapis.com/oauth2/v4/token"
client_secret = os.getenv("CLIENT_SECRET")
redirect_uri = os.getenv("REDIRECT_URI")
authorization_base_url = "https://accounts.google.com/o/oauth2/v2/auth"
token_url = "https://www.googleapis.com/oauth2/v4/token"
scope = [
"https://www.googleapis.com/auth/gmail.metadata",
"https://www.googleapis.com/auth/userinfo.profile"
]
google_credentials = get_user_creds(user)
try:
client = OAuth2Session(client_id, token=google_credentials.access_token, scope=scope, redirect_uri=redirect_uri)
r = client.get('https://www.googleapis.com/gmail/v1/users/' + google_credentials.google_user_id + '/profile')
print(r)
except TokenExpiredError as e:
token = client.refresh_token(refresh_url, **extra)