【问题标题】:How do I access the token generated using django's social auth?如何访问使用 django 的社交身份验证生成的令牌?
【发布时间】:2012-11-14 15:13:01
【问题描述】:

我正在使用 django 的 social_auth 进行 facebook 身份验证。我正在尝试在用户使用 facebook 登录后访问令牌,以便该应用程序可以执行诸如检索用户的朋友以及他/她的新闻源上的内容之类的操作。但是,我无法获得该令牌。下面是我所拥有的。 {{instance}} 显示在模板中,但是当我添加 {{token}} 时,我收到一条错误消息,提示“QuerySet”对象没有属性“tokens”。如何获取生成的令牌?

查看

def friends(request):   
    instance = UserSocialAuth.objects.filter(user=request.user).filter(provider='facebook') 
    token = instance.tokens
    return render_to_response('reserve/templates/friends.html', {'token':token, 'instance':instance},
        context_instance=RequestContext(request))

模板

{{instance}}
<br>
{{token}}

【问题讨论】:

  • 嘿,只是想知道..您是如何访问(导入)UserSocialAuth 模型的。因为当我导入-> 从 social_auth.models 导入 UserSocialAuth 时。它给了我错误(未解决的参考)。请帮忙。
  • 尝试从 social_django.models import UserSocialAuth

标签: python django facebook token django-socialauth


【解决方案1】:

错误说明了一切:QuerySet 是您搜索的任何内容的集合(在本例中为 UserSocialAuth)。要获取该模型中的字段,您需要遍历集合:

tokens = [x.tokens for x in instance]

作为替代方案,如果您确定您的过滤器将准确返回一个实例(不是零,不是 2 或更多),您可以使用 get 而不是 filter

instance = UserSocialAuth.objects.get(user=request.user, provider='facebook') 
token = instance.tokens

但是请注意,单个提供程序可以返回 more than one token,例如 oauth_tokenoauth_token_secret,因此您应该选择您想要的和/或适当地格式化它。

【讨论】:

  • 谢谢,这行得通!作为一个单独的问题,您能帮我解决在我的开发环境中使用社交身份验证的问题吗? stackoverflow.com/questions/13576551/…
  • @sharataka 我还在学习 django-social-auth,不确定我是否能够回答其他问题。但我会仔细看看,看看能不能帮上忙。
  • 我更喜欢使用user.social_auth.filter(provider='facebook')[0] 而不是get,因为get 可以删除多对象错误,而[0] 无论如何都会在查询中添加limit 1
  • @omab 不会隐藏应用程序逻辑错误而不是快速失败吗?如果你的前提是错误的(查询应该返回单个对象,但),那么这个错误将很难找到。如果你的模型设计得很好——例如,有unique_together = (("user", "provider"),)——那就不用担心了。
  • @mgibsonbr,如果您的代码将 Facebook 连接数限制为每个用户只有一个,那么是的,.get(...) 更好,否则代码应该遍历相关的社交帐户或只获得一个基于一些标准。
猜你喜欢
  • 2018-05-23
  • 1970-01-01
  • 2015-04-16
  • 2018-03-25
  • 2016-02-10
  • 2014-05-11
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
相关资源
最近更新 更多