Я использую Django social_auth api для входа через социальную учетную запись. Здесь я хочу получить адрес электронной почты из социальной учетной записи и сохранить ее в моей таблице базы данных. Имя и фамилия могут быть получены из учетной записи, но я не могу получить адрес электронной почты, изображение профиля. Поделитесь своими идеями по извлечению этих деталей из социальной учетной записи.Django Social Auth: Получить письмо от linkedin, twitter & facebook
4
A
ответ
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']