【问题标题】:Use Google API with a token [Django & AllAuth]使用带有令牌的 Google API [Django & AllAuth]
【发布时间】:2019-01-05 14:12:36
【问题描述】:

我在我的 Django 应用上使用 AllAuth 来管理用户身份验证。这样我的用户就可以连接他们的谷歌账户,我得到一个谷歌 API 令牌(具有适当的范围)。

我想使用该令牌访问带有该令牌的谷歌 API(在我的情况下为日历 v3),因为我的用户已经使用 OAuth2 登录我的网站,并允许我访问日历 API。

Google 只在他们的网站上提供了完整的流程(从 auth 到 api),有没有办法构建我的想法,还是根本不可能?

正如here 所说,我已经尝试过drive = build('calendar', 'v3', credentials=credentials),但“凭据”需要成为oauth2client 的一部分,而不仅仅是一个简单的字符串令牌。

感谢您宝贵的时间。

西蒙

【问题讨论】:

  • 您可以使用有效的access token(可能还有refresh_token + refresh uri)授权http 客户端,并将其提供给客户端库而不是凭据对象。或者,您可以使用令牌和刷新 uri 构建凭证对象。无论哪种方式,您都将一个传递给build 命令。
  • @Simon 你有没有找到任何解决方案,你能告诉我你是如何获得谷歌的访问令牌的吗?
  • @usama 遗憾的是,我刚刚完成了该项目并开始从事其他工作,抱歉。希望你能找到答案——如果你找到了,请不要犹豫!

标签: python django google-api django-allauth google-api-python-client


【解决方案1】:

我知道这是一个较老的问题,但我终于找到了适合我的东西。在使用 allauth 成功验证后,我这样做是为了获取客户端令牌,然后构建服务。

    from googleapiclient.discovery import build
    from google.oauth2.credentials import Credentials
    from allauth.socialaccount.models import SocialToken, SocialApp

    ...    

    # request is the HttpRequest object
    token = SocialToken.objects.get(account__user=request.user, account__provider='google')

    credentials = Credentials(
        token=token.token,
        refresh_token=token.token_secret,
        token_uri='https://oauth2.googleapis.com/token',
        client_id='client-id', # replace with yours 
        client_secret='client-secret') # replace with yours 

    service = build('calendar', 'v3', credentials=credentials)

【讨论】:

  • 你把这段代码放在哪里了?那是视图吗?在我正在寻找相同的解决方案时,您是否介意分享一些更深入的代码!
  • 是的,它在我的views.py文件的一个方法中。
猜你喜欢
  • 2021-04-21
  • 2016-08-13
  • 2023-04-10
  • 2021-02-01
  • 1970-01-01
  • 2019-07-28
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多