2012-10-30 12 views
13

django-allauthをテストすると、別のソーシャルアカウントでログインしてログアウトすると、リンクされていないように見えます。 socialaccount_set.all.0、socialaccount_set.all.1などを参照してください)。django-allauth:複数のソーシャルアカウントを1人のユーザーにリンクする

誰かがソーシャルアカウントをリンクする方法を説明できますか?

私はこのポストを見ました:how do i connect multiple social auth providers to the same django user using django-allauth?最初に1つの社会的なアカウントでログインし、その後自分自身のために他のアカウントをリンクするユーザーの責任を負うようです。

確かに、ユーザーにonusを置かずにこれを行う方法があるはずですか?たぶん電子メールアドレスですか?

既存ユーザーの事実の後にこれを行う方法はありますか?

+0

両方のソーシャルアカウントのメールアドレスが同じ場合は、自動リンク時に刺すことができます。私は同様の質問に答えました。それは役に立つかもしれません。http://stackoverflow.com/a/19443127/805427 – elssar

答えて

12

確かにonuserを に置くことなくこれを行う方法がありますか?たぶん電子メールアドレスですか?

どうすればよいか非常に注意してください。あなたは巨大なセキュリティホールを開いているかもしれません。ユーザーにいくつかの責任を負わず、同じメールアドレスのアカウントを自動リンクするだけの場合は、次の攻撃ベクトルを導入します。

  • あなたのサイトのユーザーを検索して、
  • )非常に簡単に私の電子メールを使用してプロバイダーの1
  • でアカウントを作成します(それだけで開くには、この穴のための完全なコーナーケースをしないにあなたのプロバイダのいずれかを取る)、電子メールを確認して電子メールを追加し、鉱山を削除
  • 新しいlax-providerアカウントでサービスにサインアップする
  • オートマを取得するintialユーザーにtched、自分のアカウントへのアクセスを得る

あなたはこのリスクを軽減するための措置をとることができますが、すべてのプロバイダは、現在のメールの確認が必要な場合でも、サードパーティのチーム内の任意のスリップアップはその後で、この穴を開けますあなたのセキュリティ。

おそらくリスクが高いことは功がありますので、気をつけてください。ユーザーの負担はおそらく最悪のことではありません。

自動マッチを提案してから、元のアカウントに新しいアカウントを追加するためにパスワードを尋ねるか、元のプロバイダの1人を再認証するように求められます。これらは悪用される可能性は同じではありませんが、脳機能のレベルコーナーケースやUI合併症があります。

+3

これはセキュリティ上の問題かもしれませんが、あなたはその質問に答えていません。 – neves

+2

@neves私は質問の検討に反対しています。それは答えです。ただあなたが望むものではありません。 「あなたは私の腕を切るにはどうすればよいのですか?」という質問があった時の99%以上が正解です。 – Ted

+5

ここで炎戦を開始しないでください。セキュリティ上の懸念は妥当ですが、セキュリティはトレードオフです。私のサードパーティーがGoogleとFacebookだけで、私のサイトが銀行口座でない場合は、より良い使いやすさのためにセキュリティを交換できるかもしれません。 – neves

15

ユーザーがすでにログインしている場合は、provider_login_urlタグを使用して別のアカウントに接続し、属性をprocess="connect"に設定しました。ここで認証されたユーザーのために表示されたブロックに置くためのコードスニペットです:

{% load socialaccount %} 
<p><a href="{% provider_login_url "facebook" process="connect" %}">Connect a facebook account</a></p> 
<p><a href="{% provider_login_url "google" process="connect" %}">Connect a Google account</a></p> 

設定SOCIALACCOUNT_QUERY_EMAIL=Trueは、あなたのプロバイダの範囲に電子メールを求めることを忘れないでください:

SOCIALACCOUNT_PROVIDERS = \ 
    {'facebook': 
     {'SCOPE': ['email', ], 
      'AUTH_PARAMS': {'auth_type': 'reauthenticate'}, 
      'METHOD': 'oauth2', 
      'LOCALE_FUNC': lambda request: 'pt_BR'}, 
    'google': 
     {'SCOPE': ['https://www.googleapis.com/auth/userinfo.profile', 
        'email'], 
      'AUTH_PARAMS': {'access_type': 'online'} 
     }, 
} 

また、電子メールアドレスを使用してアカウントを自動的に関連付けることができるかどうかを知りたい。私は、socialaccount_socialaccountテーブルの "extra_data"欄に、GoogleとFacebookの両方が"verified_email": trueを送信することがわかります。私にとっては、ログインと自動的なユーザビリティの向上を自動的に関連付けるだけで十分でしょう。

関連する問題