设置
我使用的是Django 1.8.15和django-allauth 0.28.0。
描述
我想要做的事情很容易解释:
如果用户通过社交媒体(Facebook、Google+或Twitter)登录,我想要从sociallogin
中检索extra_data
来获取头像的URL和其他信息,并将其存储在我的Profile
中,这是与我的User
模型相关的One-to-one relation
。
我的方法
1)
首先,我添加了一个带有pre_social_login
类的函数,就像这里所示,该函数在用户通过社交媒体登录后被调用。
models.py
class SocialAdapter(DefaultSocialAccountAdapter):
def pre_social_login(self, request, sociallogin):
"""Get called after a social login. check for data and save what you want."""
user = User.objects.get(id=request.user.id) # Error: user not available
profile = Profile(user=user)
picture = sociallogin.account.extra_data.get('picture', None)
if picture:
# ... code to save picture to profile
settings.py
SOCIALACCOUNT_ADAPTER = 'profile.models.SocialAdapter'
我想从用户处获取实例,但似乎它尚未被创建。因此,我尝试了以下操作:
2)
如果添加了新用户,则有另一个信号会创建一个配置文件:
models.py
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_profile_for_new_user(sender, created, instance, **kwargs):
"""Signal, that creates a new profile for a new user."""
if created:
profile = Profile(user=instance)
# following code was pasted here
profile.save()
我已添加以下内容:
data = SocialAccount.objects.filter(user=instance)
# do more with data
但是data
总是为空[]
我很难理解这个问题。我的意思是,如果用户通过社交媒体登录,而我无法从User
中访问用户(情况1),因为它还没有被创建,那么当我在情况2中尝试获取它时,SocialAccount
应该已经被创建了!你有其他解决办法吗?或者我漏掉了什么重要的东西?
提前感谢