2012-04-24 78 views
1

我正在通過django-socialauth支持Facebook協會的網站上工作。除非有時我需要處理'Account already in use'ValueError,這個庫工作得很好。如何使用SOCIAL_AUTH_PROCESS_EXCEPTIONS設置

它從django-socialauth的documentation(搜索'exception')中顯示出存在SOCIAL_AUTH_PROCESS_EXCEPTIONS設置來指定異常處理程序。所以我創建了一個虛擬函數:

SOCIAL_AUTH_PROCESS_EXCEPTIONS = 'myapp.utility.process_exceptions' 

但是,當我啓動ValueError時,處理程序永遠不會被調用。有沒有人有使用此關鍵SOCIAL_AUTH_PROCESS_EXCEPTIONS的經驗?

非常感謝!

+0

您使用的是django-socialauth還是django-social-auth? – user307927 2012-05-27 20:15:59

+0

道歉,我實際上使用django-social-auth == v0.6.6 – airfang 2012-05-29 07:47:56

回答

0

我覺得你最好的選擇是修改認證管道並創建自己的這個功能,這是social_auth /後端/管道/ associate.py的版本:

高清associate_by_email(詳細信息,*指定參數時,* * kwargs): 「」 「返回用戶提供相同的電子郵件地址條目一個細節回來了。」 「」 電子郵件=如果更換此行details.get( '電子郵件')

warn_setting('SOCIAL_AUTH_ASSOCIATE_BY_MAIL', 'associate_by_email') 

if email and setting('SOCIAL_AUTH_ASSOCIATE_BY_MAIL', True): 
    # try to associate accounts registered with the same email address, 
    # only if it's a single object. AuthException is raised if multiple 
    # objects are returned 
    try: 
     return {'user': User.objects.get(email=email)} 
    except MultipleObjectsReturned: 
     raise AuthException(kwargs['backend'], 'Not unique email address.') 
    except User.DoesNotExist: 
     pass 


提出AuthException(kwargs ['backend'],'不是唯一的電子郵件地址。' )
爲通過語句,那麼如果數據庫中有重複的電子郵件(意味着它不能關聯到任何特定的帳戶),它不會嘗試通過電子郵件關聯,而是將傳遞到管道中的下一個項目。最終這應該導致創建一個新帳戶。

+0

DSA的開發者MatíasAguirre指出,這種方法到今天還有點老。現在中間件是首選的方法。請參閱https://groups.google.com/d/msg/django-social-auth/_TlXWTV0RxI/2kEZQPws90UJ – Peterino 2012-08-20 09:43:58