2013-08-30 4 views
4

Я использую Django social_auth api для входа через социальную учетную запись. Здесь я хочу получить адрес электронной почты из социальной учетной записи и сохранить ее в моей таблице базы данных. Имя и фамилия могут быть получены из учетной записи, но я не могу получить адрес электронной почты, изображение профиля. Поделитесь своими идеями по извлечению этих деталей из социальной учетной записи.Django Social Auth: Получить письмо от linkedin, twitter & facebook

ответ

5

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 и не передаются в процессе AUTH. Вы можете определить свой трубопровод, чтобы сохранить его как это:

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']