2014-02-17 43 views
2

我使用python-social-auth和django。 我想通過Facebook授權,但之前,我已經用默認的方式(電子郵件,密碼)與Facebook使用的電子郵箱註冊。 我可以將Facebook帳戶與註冊帳戶關聯嗎? 我試圖搜索,但沒有任何東西python social auth duplicate entry

回答

4

檢查Associate users by email,這應該解釋如何做到這一點。

關聯用戶通過電子郵件

有時是可取的,如果電子郵件已經匹配的用戶帳戶的社交網絡帳戶會自動關聯。

例如,如果用戶使用他的Facebook帳戶註冊,然後退出並下次嘗試使用Google OAuth2登錄,則可能會很好(如果兩個社交網站都配置了相同的電子郵件地址),則該用戶進入他的Facebook後臺創建的初始帳戶。

這種情況是有可能通過啓用associate_by_email管道的功能,如:

SOCIAL_AUTH_PIPELINE = (
    'social_core.pipeline.social_auth.social_details', 
    'social_core.pipeline.social_auth.social_uid', 
    'social_core.pipeline.social_auth.auth_allowed', 
    'social_core.pipeline.social_auth.social_user', 
    'social_core.pipeline.user.get_username', 
    'social_core.pipeline.social_auth.associate_by_email', # <--- enable this one 
    'social_core.pipeline.user.create_user', 
    'social_core.pipeline.social_auth.associate_user', 
    'social_core.pipeline.social_auth.load_extra_data', 
    'social_core.pipeline.user.user_details', 
) 

此功能默認是關閉的,因爲它不是100%安全這一過程與所有的後端自動化。並非所有提供商都會驗證您的電子郵件帳戶,其他用戶可以利用此優勢。

例如用戶A在您的網站上註冊了郵箱[email protected]。然後惡意用戶註冊到另一個不使用同一帳戶驗證其電子郵件的提供商。最後,此用戶將轉向您的站點(支持該提供商)並註冊,因爲電子郵件是相同的,惡意用戶將控制用戶A帳戶。

編輯:將固定和複製的文檔的詳細信息鏈接到此答案。

+0

你需要先登錄吧?否則,它會創建一個新帳戶,最終會出現重複的電子郵件地址,從而引發異常。 – un33k

+0

@ValNeekman,不,通過電子郵件進行關聯僅適用於註銷用戶。當給定的電子郵件已被多個帳戶使用時會引發異常,因爲PSA不知道哪一個用於關聯。 – omab

+0

你確定嗎?,我查看了associate_by_email的代碼,它返回None作爲零電子郵件,爲多個電子郵件引發AuthException,並在找到一個電子郵件時返回用戶。在我的情況下,我註冊了谷歌,註銷,然後註冊與我的Gmail帳戶的Facebook,並繁榮,我得到了用相同的電子郵件地址創建的第二個帳戶。我遇到了AuthException,但沒有在我的情況下引發。當用戶登錄時,一切正常,但我想避免在我的數據庫中重複輸入電子郵件,如果沒有登錄。thx – un33k

相關問題