2

social-auth をインストールしてセットアップした後、コツを掴もうとして少し遊んでいます。ドキュメントを読み、サンプル プロジェクトを使用して実行しました。

しかし、今まで、特定のプロバイダーに関する情報を取得する方法がわかりません。サンプル プロジェクトでは、テンプレート タグは常に次のように使用されます。

{% 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)。ここで、「facebook」は のすべての値を持つリストになりますaccount.provider

私の頭に浮かぶのはこれです:

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

これは明らかにうまくいきません。これはうまくいくと思いますが、私が求めている結果は返されません:

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

これを行うことができるDjangoの機能はありますか? たぶん、私が見逃している特別なテンプレートタグがありますか? それとも、この機能は既に social_auth に組み込まれていますか? それとも、私の最悪の疑念は、それが本当に明白なのか、そして私は...

どんな助けでも大歓迎です。

4

2 に答える 2

3

「social_auth」はタプル内のタプルではなく、辞書です:

{'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 フィールドにないことを確認してください。

于 2012-04-04T16:35:05.283 に答える
0

providers誰かが切断 URL を作成する必要がある場合に備えて、私が思いついたハック コードを次に示します。["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 %}

これを行う代わりに、関連付けられたアカウントの辞書が必要なようですが、わかりませんでした。ユーザーが自分のアカウントを 2 回認証できた場合にどうなるかはわかりません。

于 2013-05-29T20:27:43.840 に答える