如何访问使用django社交身份验证生成的令牌?

时间:2012-11-27 03:04:41

标签: python django facebook token django-socialauth

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

视图

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}}

1 个答案:

答案 0 :(得分: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,因此您应该选择所需的和/或进行适当格式化。