【问题标题】:Django-Social-Auth Facebook doesn't save user's detailsDjango-Social-Auth Facebook 不保存用户的详细信息
【发布时间】:2015-11-04 03:33:08
【问题描述】:

我正在使用基本的 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)

【问题讨论】:

    标签: python django facebook django-socialauth


    【解决方案1】:

    我之前也遇到过同样的问题,所以你需要在你的 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')
    

    【讨论】:

    • 所以我需要在settings.py文件中添加这段代码吗?该变量没有被使用,我在 urllib2 和 json 对象中遇到错误。
    • 编写此代码并将此功能添加到管道设置中。
    • 我需要在哪里编写您提供的代码?在哪个文件中?我是 Django 新手 :)
    • 您将在 settings.py 文件中拥有一个管道设置。
    • 创建一个新文件并添加此功能并在管道设置中提供文件路径
    【解决方案2】:

    与 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
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2017-03-08
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 2020-03-31
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      相关资源
      最近更新 更多