2014-04-27 25 views
1

Python Social Auth中的默認用戶名生成方案是採用auth'd社交網絡的用戶名,如果已經採用,請爲其添加一些隨機值(或者是散列?)。Python社會認證:如何定義不同的用戶名方案?

無論如何,我想改變這種行爲,我想定義我自己的用戶名生成方法。比如用戶名+提供者+隨機。

想法?

回答

6

您所需要的只是將SOCIAL_AUTH_PIPELINE中的social.pipeline.user.get_username替換爲您自己的函數的路徑,並返回生成的用戶名。

例如:

項目/ MYAPP/settings.py

SOCIAL_AUTH_PIPELINE = (
    'social.pipeline.social_auth.social_details', 
    'social.pipeline.social_auth.social_uid', 
    'social.pipeline.social_auth.auth_allowed', 
    'social.pipeline.social_auth.social_user', 
    'project.myapp.utils.get_username', 
    'social.pipeline.social_auth.associate_by_email', 
    'social.pipeline.user.create_user', 
    'social.pipeline.social_auth.associate_user', 
    'social.pipeline.social_auth.load_extra_data', 
    'social.pipeline.user.user_details', 
) 

項目/ MYAPP/utils.py:

from social.pipeline.user import get_username as social_get_username 
from random import randrange 

def get_username(strategy, details, user=None, *args, **kwargs): 
    result = social_get_username(strategy, details, user=user, *args, **kwargs) 
    result['username'] = '-'.join([ 
     result['username'], strategy.backend.name, str(randrange(0, 1000)) 
    ]) 
    return result 

在上面的功能我從python-social-auth模塊調用默認的get_username方法,並導致附加提示ider名稱和0到1000之間的隨機數。

您可以檢查social.pipeline.user.get_username on GitHub的源代碼。

+0

有與randrange一個問題出現,一個異常:異常 序列第2項:期望的字符串或Unicode,詮釋發現 ,但我固定它,現在它的作品,我可以完全控制用戶名代。尼斯。 – Orca

+0

啊,我的錯誤,我忘記將int轉換爲str。代碼已更新。 – daniula

+0

令人驚歎。感謝它幫助了我很多! –

相關問題