2015-11-04 63 views
0

我正在使用基本的Django-Social-Auth Facebook代碼通過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', 
) 

我看着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

編寫此代碼並將此功能添加到pilpeline設置。 –

+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 

希望這有助於

相關問題