2012-04-04 60 views
2

安裝和設置社交認證後,我玩了一下,試圖獲得它的竅門。我已閱讀文檔,並使用示例項目來運行它。如何從模板中的Django social-auth獲取特定提供者?

但直到現在我不知道如何獲得某個提供商的信息。在這個例子中項目templatetags總是用這樣的方式:

{% for type, accounts in social_auth.associated.items %} 
    {% for account in accounts %} 
     {{account.provider}} is connected. 
    {% endfor %} 
{% endfor %} 

我想現在做的不是列出所有的供應商,但是否有人與他的帳戶(即。)Facebook的是什麼。這樣,我可以做這樣的事情:

if user==connected_to_facebook 
    provide some functionality 
endif 

從上面的例子中我知道,social_auth.associated.items包含(type,account),在「臉譜」然後將能夠與account.provider所有值的列表元組。

什麼我想到的是:

{% if "facebook" in social_auth.associated.items.accounts.provider %} 

其中,很明顯,是行不通的。我認爲,這將工作,但沒有返回結果之後,我敢:

{% if "facebook" in social_auth.associated.items[1].provider %} 

是否有Django的一些功能,我可以做到這一點?也許我錯過了一些特殊的模板標籤?或者,這個功能已經內置到了social_auth中,我不知何故錯過了文檔?或者,我最可疑的是,它真的很明顯,而我只是...

任何幫助非常歡迎。

回答

3

「social_auth」不是元組內的一些元組,這是一個dictionairy:

{'not_associated': {}, 'backends': {'oauth2': ['facebook']}, 
'associated': {'oauth2': [<UserSocialAuth:testuser>]}} 

這無疑使得很多更有意義,但還是在任何地方不會導致。所以,我看了看已經沒有關聯他的賬戶還沒有一個用戶,並有那本字典是這樣的:

{'not_associated': {'oauth2': ['facebook']}, 'backends': {'oauth2': ['facebook']}, 
'associated': {}} 

現在,我發現了一些有用的:

{% if "facebook" in social_auth.not_associated.oauth2 %} 
{% else %} 
    provide facebook functionality 
{% endif %} 

工程。所有你必須知道的是你正在尋找的後端使用的認證類型,然後確保它不在social_auth的not_associated字段中。

0

萬一有人需要創建一個斷開連接的URL,這是我想出了破解-Y代碼,其中providers是我傳遞像一個列表["Facebook", "Twitter"]

{% for p in providers %} 
    <h2>Link {{ p }} Account</h2> 
    <p>Use your {{ p }} account to log in 
    {% if p|lower in social_auth.not_associated %} 
     <a href="{% url socialauth_associate_begin p|lower %}?next={{ request.path }}" class="off">No</a> 
    {% else %} 
     {% for item in social_auth.associated.all %}{% if item.provider == p|lower %} 
     <a href="{% url socialauth_disconnect_individual p|lower item.id %}" class="on">Yes</a> 
     {% endif %}{% endfor %} 
    {% endif %} 
    </p> 
{% endfor %} 

好像應該有一個關聯賬戶的字典,而不是這樣做,但我無法弄清楚。不確定如果用戶設法授權他們的帳戶兩次會發生什麼。

相關問題