how to get user email with python social auth with facebook and save it

12,255

Solution 1

After some changes in Facebook Login API - Facebook's Graph API v2.4 You will have to add these lines to fetch email

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

Solution 2

I think the problem is using FACEBOOK_EXTENDED_PERMISSIONS.

According to http://python-social-auth.readthedocs.org/en/latest/backends/facebook.html#oauth2 you should use:

SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']

Share:
12,255

Related videos on Youtube

a_b
Author by

a_b

Updated on September 15, 2022

Comments

  • a_b
    a_b over 1 year

    I'm trying to implement python-social-auth in django.

    I want users to authenticate through facebook and save their email.

    I'm able to authenticate users but the extended permission for email is not showing up in the facebook authentification box and it's not storing the email in the database.

    In settings.py I have the 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'
    )
    

    The facebook dialog box...

    enter image description here

    How can I solve this?

  • Ev.
    Ev. over 8 years
    Does it still work by any chance? I can't get it working.
  • sureshvv
    sureshvv about 8 years
    Yep.. You need the EXTRA_PARAMS also
  • sureshvv
    sureshvv about 8 years
    You need the EXTRA_PARAMS also. See answer below.
  • Justin Harris
    Justin Harris over 7 years
    Perfect, this updates users in my db when they log back in.
  • knaperek
    knaperek over 7 years
    Does this still work? I can't get it working and the worst thing is that it doesn't even produce any error logs, it just silently skips the email retrieval step.
  • Mihai Zamfir
    Mihai Zamfir over 6 years
    Email not being retrieve not even with this setting