2012-02-19 90 views
4

我設法安裝了django-social-auth,但是我錯過了我實際上可以使用從facebook獲得的數據創建用戶名並使用個人資料圖像或關於場...使用Facebook數據的django社交認證

我知道,在Django的社會身份驗證的設置,我可以設置SOCIAL_AUTH_DEFAULT_USERNAME =「new_social_auth_user」和FACEBOOK_EXTENDED_PERMISSIONS = [...]但我不undestrand凡在我的代碼,我可以插上這個數據,所以不要有隨機的用戶名。

+2

首先,你需要嘗試接受更多在可能的情況下回答您的問題 - 人們將更有可能幫助您。關心這個問題;你是否說你想要操縱用戶名等__after__他們已經與facebook授權,但__before__他們的用戶名被保存到數據庫? – 2012-02-19 20:14:15

+0

準確!我沒有意識到接受答案的事情。我肯定會接受更多的答案,我認爲我應該只接受1個答案或不接受答案。謝謝。 – freethrow 2012-02-19 20:31:17

+0

那麼,每個問題只能接受一個答案,而且只有在實際情況正確的情況下才應該這樣做,但如果找出問題,您也可以接受自己的答案。 – 2012-02-19 21:11:57

回答

13

django-social-auth實現了一個管道(這似乎是一個新功能,因爲它在我試用時並不存在),允許您在身份驗證過程的某些步驟中插入自定義函數。請在此處查看the docs hereexample pipline function

所以,你可以寫一個函數:

SOCIAL_AUTH_PIPELINE = (
    'social_auth.backends.pipeline.social.social_auth_user', 
    'social_auth.backends.pipeline.associate.associate_by_email', 
    'social_auth.backends.pipeline.user.get_username', 

    'app.pipeline.custom_create_user', 

    'social_auth.backends.pipeline.social.associate_user', 
    'social_auth.backends.pipeline.social.load_extra_data', 
    'social_auth.backends.pipeline.user.update_user_details' 
) 

在您custom_create_user功能包默認create_user並創建用戶名根據Ø自己的需要:

from social_auth.backends.pipeline.user import create_user 
def custom_create_user(request, *args, **kwargs): 
    user = *kwargs.get('user', None) 
    # Do something with username 
    return create_user(request, args, kwargs) 
+0

這正是我所需要的。奇怪的是,我閱讀了文檔,無法從中找出它,而這非常簡單。我可以設法使用Facebook的額外數據,或者我應該使用另一個Facebook的Django應用程序(我不想讓事情太複雜)。 – freethrow 2012-02-21 19:13:56