2012-10-30 58 views
13

在測試django-allauth時,如果我登錄並註銷不同的社交賬戶,他們似乎並沒有連接在一起(因爲我無法通過訪問它們看着socialaccount_set.all.0,socialaccount_set.all.1等)。django-allauth:將多個社交賬戶鏈接到一個用戶

有人可以解釋如何將社交帳戶鏈接在一起嗎?

我看到這個帖子:how do i connect multiple social auth providers to the same django user using django-allauth?這似乎把用戶的責任首先登錄到一個社交帳戶,然後鏈接其他帳戶爲自己。

當然應該有辦法做到這一點,而不會把責任放在用戶身上?也許用電子郵件地址?

有沒有辦法在現有用戶的事實後做到這一點?

+0

如果兩個社交帳戶的電子郵件地址相同,則可能會發生自動鏈接刺戳。我回答了一個類似的問題,你可能會發現它很有用 - http://stackoverflow.com/a/19443127/805427 – elssar

回答

12

當然應該有辦法做到這一點,而無需把責任推 用戶?也許用電子郵件地址?

要非常小心你如何做到這一點。你可能會打開一個巨大的安全漏洞。如果你不把用戶和剛剛自動鏈接帳戶一些責任與您介紹以下攻擊向量相同的電子郵件地址:

  • 查找用戶在您的網站,找出他們的電子郵件地址(通常這是很容易)
  • 與我的電子郵件
  • 驗證電子郵件,添加他們的電子郵件,刪除礦(只需要你的供應商之一,爲這個洞開不做滿角落的情況下)
  • 創建帳戶您的供應商之一
  • 用我的新的寬鬆提供者帳戶「註冊」您的服務
  • Get automa tched到INTIAL用戶,得到他們的帳戶訪問

你可以採取措施來降低這種風險,但即使所有的供應商現在需要確認電子郵件,任何閃失,在第三方隊會再打開這個洞你的安全。

也許你在做什麼風險是值得的,只是請小心。用戶的一點責任可能不是最糟糕的事情。

我已經看到它建議自動匹配的流程,然後詢問您的密碼或重新驗證其中一個原始提供商以將新帳戶添加到您的原始帳戶。這些不會有相同的潛力來利用,但有一些腦力激盪水平的角落案件和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'} 
     }, 
} 

我還想知道是否可以使用電子郵件地址自動關聯帳戶。我可以在Google和Facebook發送"verified_email": true的socialaccount_socialaccount表的「extra_data」列中看到。對我來說,自動關聯登錄和一個很好的可用性增強就足夠了。

相關問題