2016-03-17 2 views
0

1. Je souhaite définir l'adresse e-mail de l'utilisateur sur le champ du nom d'utilisateur de la table auth_user. Dans le champ, first_name + last_name est défini comme le problème standard, par exemple "TomCruise". Mais il y a beaucoup de gens qui ont le même nom surtout quand on se connecte à un compte facebook. Donc, je pensais que le courrier électronique serait préférable d'être placé au champ de nom d'utilisateur au lieu de prénom + nom de famille.Voulez-vous s'il vous plaît laissez-moi savoir comment changer le champ de base de données par défaut avec PIPELINE de python-social-auth?

2. Je souhaite ajouter un champ fullname dans la table auth_user.

from django.contrib.auth.models import AbstractUser 
class User2(AbstractUser): 
    full_name = models.Charfield() 

Si python-auth-social ou Django mis fullname (prenom + last_name) à FULL_NAME champ automatiquement lorsqu'un utilisateur soupir, je serais reconnaissant. Bien qu'il semble que nous pouvons obtenir le nom complet de l'utilisateur comme nom de facebook ..., je suppose qu'il est poussé dans le champ de nom d'utilisateur.

Voici ce que j'ai fait.

myfacebook_pipeline.py

from myapp.models import User2 

def myfacebook(backend, user, response, *args, **kwargs): 
    import pdb; pdb.set_trace() 
    if backend.name == 'facebook': 
     profile = User2.objects.get(id=user.id) 
     profile.full_name = response.get('name') 
     profile.username = response.get('email') 
     profile.save() 

settings.py

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'myapp', 
    'debug_toolbar', 
    'social.apps.django_app.default', 
] 

MIDDLEWARE_CLASSES = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.cache.UpdateCacheMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.cache.FetchFromCacheMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'social.apps.django_app.middleware.SocialAuthExceptionMiddleware', 
] 

AUTHENTICATION_BACKENDS = (
    'social.backends.open_id.OpenIdAuth', 
    'social.backends.facebook.FacebookOAuth2', 
    'django.contrib.auth.backends.ModelBackend', 
) 


SOCIAL_AUTH_URL_NAMESPACE = 'social' 
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/home/' 
SOCIAL_AUTH_LOGIN_ERROR_URL = '/login-error/' 
SOCIAL_AUTH_LOGIN_URL = '/' 
SOCIAL_AUTH_DISCONNECT_REDIRECT_URL = '/logout/' 

# facebook 
SOCIAL_AUTH_FACEBOOK_KEY = 'key' 
SOCIAL_AUTH_FACEBOOK_SECRET = 'password' 
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email'] 
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = { 
    'fields': 'id, name, email', 
} 

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', 
    'social.pipeline.user.get_username', 
    'social.pipeline.user.create_user', 

    'pylib.pipeline.myfacebook_pipeline.myfacebook', # <= my pipeline 

    'social.pipeline.social_auth.associate_user', 
    'social.pipeline.social_auth.load_extra_data', 
    'social.pipeline.user.user_details', 
) 

SOCIAL_AUTH_DISCONNECT_PIPELINE = (
    'social.pipeline.disconnect.allowed_to_disconnect', 
    'social.pipeline.disconnect.get_entries', 
    'social.pipeline.disconnect.revoke_tokens', 
    'social.pipeline.disconnect.disconnect', 
) 

J'ai ajouté mon pipeline, mais cela n'a pas fonctionné.

Pourriez-vous me donner quelques conseils?

Merci.

Répondre

0

Je pourrais résoudre ceci par moi-même. L'ordre de PIPELINE était faux.