2012-11-27 42 views
1

我正在使用django的social_auth進行Facebook身份驗證。我試圖在用戶使用Facebook登錄時訪問令牌,以便應用可以執行諸如檢索用戶的朋友以及他/她的新聞源內容等內容。但是,我無法獲得該令牌。以下是我的。 {{instance}}顯示在模板中,但是當我添加{{token}}時,我得到一個錯誤,說'QuerySet'對象沒有屬性'tokens'。我如何獲得生成的令牌?如何訪問使用django的社交身份驗證生成的令牌?

視圖

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

嘿,只是好奇知道..你是如何訪問(導入)UserSocialAuth模型。因爲當我從導入 - >從social_auth.models導入UserSocialAuth。它給了我錯誤(未解決的參考)。請幫忙。 – Jay

回答

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,所以你應該選擇你想要哪一個和/或適當地格式化。

+0

謝謝,這個作品!作爲一個單獨的問題,您能幫我在我的開發環境中使用社交身份驗證進行疑難解答嗎? http://stackoverflow.com/questions/13576551/how-to-login-using-facebook-in-development-environment-using-django-social-auth – sharataka

+0

@sharataka我仍然在學習django-social-auth,而不是當然,如果我能回答這個問題。但我會仔細觀察,看看我能不能幫助。 – mgibsonbr

+0

我更喜歡使用'user.social_auth.filter(provider ='facebook')[0]'而不是'get',因爲'get'可以刪除一個多對象錯誤,並且'[0]'添加一個限制1'無論如何。 – omab

相關問題