【问题标题】:Django UserSocialAuth matching query does not existDjango UserSocialAuth 匹配查询不存在
【发布时间】:2019-05-16 08:15:07
【问题描述】:

我正在使用 github API 开发一个网络应用程序。我想获取已使用 Python Social Auth 进行身份验证的用户的令牌,但是当我尝试访问用户的令牌时出现以下错误 UserSocialAuth matching query does not exist

我真的不知道该怎么做才能访问这些额外的数据。

这是我尝试访问令牌时的代码:

    if request.user.is_authenticated:
        gituser = request.user.social_auth.get(provider ='github-oauth2')
        extra_data = str(gituser.extra_data['access_token'])

提前致谢!

【问题讨论】:

    标签: python django frameworks pygithub


    【解决方案1】:

    您正在尝试使用 get() 获取单个对象,并且由于它不存在,因此它返回 DoesNotExist 异常。 使用 filter 代替 get 如下所示:

    gituser = request.user.social_auth.filter(provider ='github-oauth2')
    
    for user in gituser:
      extra_data = user.extra_data
    

    或者你可以使用get_object_or_404,如下所示:

    from django.shortcuts import get_object_or_404
    
    gituser = get_object_or_404(UserSocialAuth, provider ='github-oauth2')
    extra_data = gituser.extra_data
    

    【讨论】:

    • 感谢您的回答!但现在它给了我“'QuerySet'对象没有属性'extra_data'”
    • 无法直接获取extra_data。使用过滤器时,它会返回查询集,因此遍历查询集。请参阅我更新了答案。这样您可以获得额外数据
    • 但是 get_object_or_404 只会返回一个对象。对于多个,您可以使用 get_list_or_404
    猜你喜欢
    • 2015-01-28
    • 2022-01-05
    • 2020-10-15
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多