2014-04-27 1 views
1

Le schéma de génération de nom d'utilisateur par défaut dans Python Social Auth est de prendre le nom d'utilisateur du réseau social authentifié, et s'il est déjà pris, ajoutez-lui une valeur aléatoire (ou est-ce un hachage?).Python Social Auth: Comment définir un schéma de nom d'utilisateur différent?

De toute façon, je veux changer ce comportement, je veux définir ma propre méthode de génération de nom d'utilisateur. Comme par exemple nom d'utilisateur + fournisseur + aléatoire.

Des idées?

Répondre

6

Tout ce dont vous avez besoin est de remplacer social.pipeline.user.get_username par SOCIAL_AUTH_PIPELINE avec le chemin d'accès à votre propre fonction renvoyant le nom d'utilisateur généré.

Par exemple:

projet/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', 
) 

projet/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 

En fonction ci-dessus, je suis appelant la méthode par défaut get_username du module python-social-auth et d'obtenir le résultat Nom d'utilisateur et nombre aléatoire entre 0 et 1000.

Vous pouvez vérifier le code source de social.pipeline.user.get_username on GitHub.

+0

Il y avait un problème avec plageAleatoire là, une exception: exception élément de séquence 2: chaîne attendue ou Unicode, int trouvé , mais je l'ai fixé et maintenant il fonctionne, je peux contrôler totalement la génération nom d'utilisateur. Agréable. – Orca

+0

Ahh, mon erreur, j'ai oublié de convertir int en str. Code mis à jour. – daniula

+0

Incroyable. Merci ça m'a beaucoup aidé !! –

Questions connexes