2015-11-04 1 views
0

Я использую базовый код Facebook Django-Social-Auth для регистрации через Facebook. по какой-то причине я не могу получить его, чтобы сохранить электронную почту пользователя, имя и фамилию. он сохраняет имя пользователя как первый + средний + последний, но остальные атрибуты остаются пустыми. Я попробовал запросить адрес электронной почты, и приложение действительно говорит, что мы получаем адрес электронной почты, но ничего не сохраняем в таблицах.Django-Social-Auth Facebook не сохраняет данные пользователя

Я прочитал все сообщения и блоги о Facebook, но ничего не работает для меня. Я что-то упускаю?

в settings.py у меня есть:

FACEBOOK_EXTENDED_PERMISSIONS = ['email'] 
SESSION_SERIALIZER='django.contrib.sessions.serializers.PickleSerializer' 

AUTHENTICATION_BACKENDS = (
    'social_auth.backends.facebook.FacebookBackend', 
    'django.contrib.auth.backends.ModelBackend', 
) 

INSTALLED_APPS = (
... 
    'social_auth', 
) 

Я смотрел на Идентом \ models.py, и, возможно, функция create_user не получает поле электронной почты.

def create_user(self, username, email=None, password=None, **extra_fields): 
    return self._create_user(username, email, password, False, False, 
          **extra_fields) 

ответ

2

У меня также была эта же проблема раньше, поэтому вам нужно создать конвейер в файле settings.py, чтобы обновлять пользовательские данные facebook. Этот код поможет вам получить данные пользователя facebook; http://django-social-auth.readthedocs.org/en/latest/pipeline.html

def update_user_social_data(request, *args, **kwargs): 
    user = kwargs['user'] 
    if not kwargs['is_new']: 
     return 
    user = kwargs['user'] 
    if kwargs['backend'].__class__.__name__ == 'FacebookBackend': 
     fbuid = kwargs['response']['id'] 
     access_token = kwargs['response']['access_token'] 

     url = 'https://graph.facebook.com/{0}/' \ 
       '?fields=email,gender,name' \ 
       '&access_token={1}'.format(fbuid, access_token,) 

     photo_url = "http://graph.facebook.com/%s/picture?type=large" \ 
      % kwargs['response']['id'] 
     request = urllib2.Request(url) 
     response = urllib2.urlopen(request).read() 
     email = json.loads(response).get('email') 
     name = json.loads(response).get('name') 
     gender = json.loads(response).get('gender') 
+0

так что мне нужно добавить этот код в settings.py файл? переменная как не используется, и я получаю ошибку в объектах urllib2 и json. – Mike

+0

напишите этот код и добавьте эту функцию в настройки пипетки. –

+0

где мне нужно написать код, который вы указали? В каком файле? Я новичок в Django :) – Mike

0

Как и в июле 2017 вы должны поместить эти строки в settings.py

SOCIAL_AUTH_CREATE_USERS = True 
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = { 
    'fields': 'id, name, email, age_range' 
} 

SOCIAL_AUTH_FACEBOOK_API_VERSION = '2.9' # or whatever version you're using 

Надеется, что это помогает