2014-02-23 7 views
14

Ich versuche python-social-auth in Django zu implementieren.wie Benutzer E-Mail mit Python Social Auth mit Facebook erhalten und speichern

Ich möchte, dass Benutzer sich über Facebook authentifizieren und ihre E-Mails speichern.

Ich kann Benutzer authentifizieren, aber die erweiterte Berechtigung für E-Mails wird nicht in der Facebook-Authentifizierungsbox angezeigt und speichert die E-Mail nicht in der Datenbank.

In settings.py Ich habe das follwoing:

SOCIAL_AUTH_FACEBOOK_KEY='xxx' 
SOCIAL_AUTH_FACEBOOK_SECRET='xxx' 
FACEBOOK_EXTENDED_PERMISSIONS = ['email'] 

AUTHENTICATION_BACKENDS = (
    'social.backends.facebook.FacebookOAuth2', 
    'social.backends.email.EmailAuth', 
    'django.contrib.auth.backends.ModelBackend', 
) 

LOGIN_URL = '/login/' 
LOGIN_REDIRECT_URL = '/done/' 
LOGOUT_REDIRECT_URL = '/' 
URL_PATH = '' 
SOCIAL_AUTH_STRATEGY = 'social.strategies.django_strategy.DjangoStrategy' 
SOCIAL_AUTH_STORAGE = 'social.apps.django_app.default.models.DjangoStorage' 

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.social_auth.associate_by_email', 
    # 'users.pipeline.require_email', 
    'social.pipeline.mail.mail_validation', 
    'social.pipeline.user.create_user', 
    'social.pipeline.social_auth.associate_user', 
    'social.pipeline.social_auth.load_extra_data', 
    'social.pipeline.user.user_details' 
) 

Das Facebook-Dialogfeld ...

enter image description here

Wie kann ich dieses Problem lösen?

Antwort

0

diese in Ihre Datei settings.py

SOCIAL_AUTH_FACEBOOK_SCOPE = ['email'] 
40

Nach einigen Änderungen in Facebook Anmelden API - Facebook Graph API v2.4 Sie müssen diese Zeilen hinzufügen, um die E-Mail zu holen

SOCIAL_AUTH_FACEBOOK_SCOPE = ['email'] 
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = { 
    'fields': 'id,name,email', 
} 
+2

Das ist die richtige Antwort! –

+1

Yep .. Sie brauchen die EXTRA_PARAMS auch – sureshvv

+0

Perfekt, das aktualisiert Benutzer in meinem db, wenn sie sich wieder einloggen. –

Verwandte Themen