Django-Social-Auth Facebook 不保存用户的详细信息
Django-Social-Auth Facebook doesn't save user's details
我正在使用基本的 Django-Social-Auth Facebook 代码通过 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)
我之前也遇到过同样的问题,所以您需要在 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')
与 2017 年 7 月一样,您必须将这些行放入 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
希望对您有所帮助
我正在使用基本的 Django-Social-Auth Facebook 代码通过 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)
我之前也遇到过同样的问题,所以您需要在 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')
与 2017 年 7 月一样,您必须将这些行放入 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
希望对您有所帮助