Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Social Auth:从linkedin、twitter和;脸谱网_Django_Django Socialauth - Fatal编程技术网

Django Social Auth:从linkedin、twitter和;脸谱网

Django Social Auth:从linkedin、twitter和;脸谱网,django,django-socialauth,Django,Django Socialauth,我正在使用Django social_auth api通过社交帐户登录。在这里,我想从社会帐户获得电子邮件地址,并将其存储在我的数据库表中。可以从帐户中检索名字和姓氏,但我无法检索电子邮件地址、个人资料图片。请分享您从社交帐户检索这些详细信息的想法。Twitter不会披露电子邮件,要检索Facebook电子邮件,您需要定义Facebook\u扩展\u权限=['email'],LinkedIn电子邮件会自动检索。电子邮件存储在用户模型中的email属性下 可通过定义以下设置来存储配置文件图片: T

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

Twitter不会披露电子邮件,要检索Facebook电子邮件,您需要定义
Facebook\u扩展\u权限=['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()
将其添加到“管道”设置的底部(检查位于的“管道”文档)。这段代码没有经过测试,所以请使用它

然后,您可以通过以下操作访问配置文件图片:

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