我已经通过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']