如何更改提供商的默认提取数据?

时间:2019-01-29 12:35:57

标签: django django-allauth

我已经通过django-allauth设置了Facebook提供。我想更改默认提取的数据。默认情况下为['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']

0 个答案:

没有答案