如何正确地结合Django-Allauth和自定义用户配置应用程序?

4
我创建了一个名为 users 的新应用程序,其中包含模型 Profile。为了进行身份验证,我使用 django-allauthFacebookGoogle 提供商。一旦用户登录,我希望从社交提供商中填充一些附加信息来创建一个带有个人资料的配置文件,例如:全名、电子邮件、图片

这是我在 models.py 中的内容:

from django.contrib.auth.models import User
from django.dispatch import receiver
from allauth.account.signals import user_signed_up


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    full_name = models.CharField(default=None, max_length=255)
    email = models.CharField(default=None, max_length=500)
    picture = models.ImageField(default='default.jpg', upload_to='profile_pics')

    def __str__(self):
        return self.user.username

    @receiver(user_signed_up)
    def populate_profile(sociallogin, user, **kwargs):

        user.profile = Profile()

        if sociallogin.account.provider == 'facebook':
            user_data = user.socialaccount_set.filter(provider='facebook')[0].extra_data
            picture_url = "http://graph.facebook.com/" + sociallogin.account.uid + "/picture?type=large"
            email = user_data['email']
            full_name = user_data['name']

        if sociallogin.account.provider == 'google':
            user_data = user.socialaccount_set.filter(provider='google')[0].extra_data
            picture_url = user_data['picture']
            email = user_data['email']
            full_name = user_data['name']

        user.profile.picture = picture_url
        user.profile.email = email
        user.profile.full_name = full_name
        user.profile.save()

当我使用Facebook进行登录时,出现以下错误信息:

[WinError 10061] 无法连接到目标计算机,因为它积极拒绝了连接请求

而当我尝试使用Google登录时,收到以下消息:

DataError at /accounts/google/login/callback/ 值太长,超过 character varying(100) 的长度限制

请问有人能告诉我我的代码哪里出了问题吗?谢谢!


你好,我想尝试与你做类似的事情。你能分享一下你是如何在用户注册后创建用户配置文件的吗?我有一个叫做“social_login”的应用程序来处理注册/登录,还有另一个名为“users”的应用程序,与你的有点相似。当用户注册后,我该如何创建用户配置文件?例如,我该如何使用“user_signed_up”变量?谢谢 - UsmanJ
1个回答

2
问题现已解决。第一个错误信息我通过添加以下内容解决: "最初的回答"。
ACCOUNT_EMAIL_VERIFICATION = None

对于第二个问题,我不得不为图片添加max_length=255

最初的回答:

picture = models.ImageField(default='default.jpg', upload_to='profile_pics', max_length=255)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接