【问题标题】:Django Social Auth:Get email from linkedin,twitter & facebookDjango Social Auth:从linkedin、twitter和facebook获取电子邮件
【发布时间】:2013-09-02 20:23:03
【问题描述】:

我正在使用 Django social_auth api 通过社交帐户登录。在这里,我想从社交帐户获取电子邮件地址并将其存储在我的数据库表中。可以从帐户中检索名字和姓氏,但我无法检索电子邮件地址,个人资料图片。请分享您从社交帐户中检索这些详细信息的想法。

【问题讨论】:

    标签: django django-socialauth


    【解决方案1】:

    Twitter 不公开电子邮件,要检索 Facebook 电子邮件需要定义FACEBOOK_EXTENDED_PERMISSIONS = ['email'],LinkedIn 电子邮件会自动检索。电子邮件存储在email 属性下的用户模型中。

    可以通过定义此设置来存储个人资料图片:

    TWITTER_EXTRA_DATA = [('profile_image_url', 'profile_picture')]
    LINKEDIN_EXTRA_DATA = [('picture-url', 'profile_picture')]
    

    Facebook 个人资料图片可通过 API 访问,而不是在身份验证过程中发送。您可以像这样定义管道来存储它:

    from django.utils import simplejson
    from social_auth.utils import dsa_urlopen
    
    def facebook_profile_picture(backend, user, social_user, details, response, *args, **kwargs):
        if backend.name != 'facebook':
            return
        url = 'https://graph.facebook.com/{0}/picture?redirect=false&access_token={1}'
        response = dsa_urlopen(url.format(social_user.extra_data['id'], social_user.extra_data['access_token'])
        data = simplejson.load(response)
        social_user.extra_data['profile_picture'] = data['data']['url']
        social_user.save()
    

    将其添加到管道设置的底部(查看http://django-social-auth.readthedocs.org/en/latest/pipeline.html 的管道文档)。这段代码没有经过测试,所以可以试一试。

    然后您可以访问个人资料图片:

    social = user.social_auth.get(provider='facebook')  # or twitter or linkedin
    social.extra_data['profile_picture']
    

    【讨论】: