Как изменить данные, извлеченные по умолчанию поставщиком? - PullRequest
0 голосов
/ 29 января 2019

Я настроил предоставление Facebook через django-allauth.Я хочу изменить извлеченные данные по умолчанию.По умолчанию это ['email', 'username', 'first_name', 'last_name', 'name'].Мне также нужен birthday пользователя и его profile photo.

. Я пытался переопределить DefaultSocialAccountAdapter, но не нашел там полезных методов.

Также я попытался установить:

SOCIALACCOUNT_PROVIDERS = {
    'facebook': {
        'FIELDS': [
            'id',
            'email',
            'name',
            'birthday',
            'locale',
            'timezone',
            'gender',
        ],
    }
}

Но ничего не произошло.

class SocialAccountAdapter(DefaultSocialAccountAdapter):
    def populate_user(self,
                      request,
                      sociallogin,
                      data):
        print(data)
        super().populate_user(request, sociallogin, data)

data по-прежнему возвращает только 5 полей по умолчанию

ОБНОВЛЕНО РЕШЕНИЕМ

from allauth.socialaccount.signals import pre_social_login
from django.dispatch import receiver
from datetime import datetime


@receiver(pre_social_login)
def populate_profile(request, sociallogin, **kwargs):
    if sociallogin.account.provider == "facebook":
        extra_data = sociallogin.account.extra_data
        sociallogin.user.birth_date = datetime.strptime(extra_data['birthday'], '%m/%d/%Y').date()
        sociallogin.user.full_name = extra_data['name']
...