使用OAuth2 Gmail令牌访问受保护的源

时间:2019-04-25 15:04:17

标签: python django oauth-2.0 celery google-oauth2

我在弄清楚如何使用创建新的OAuth2会话并访问Gmail API的令牌时遇到麻烦。

我创建了一个使用Gmail API的应用。经过Oauth批准流程后,当令牌过期时,我为每个用户保存了他们的google user idaccess and refresh tokensid tokendate

我现在有一项任务,必须同步一些数据并访问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)


0 个答案:

没有答案