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.