Как правильно сочетать Django-Allauth и приложение Custom User Profile? - PullRequest
0 голосов
/ 17 мая 2019

Я создал новое приложение под названием users с моделью Profile . Для аутентификации я использую django-allauth с Facebook и Google провайдерами. Как только пользователь войдет в систему, я хотел бы создать профиль с некоторой дополнительной информацией, заполняемой социальными провайдерами, например: полное_имя, электронная почта, картинка .

Вот что у меня есть в 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 , я получаю следующее:

Ошибка DataEr в / account / google / login / callback / слишком длинное значение для изменяемого символа (100)

Может кто-нибудь сказать, что не так с моим кодом? Заранее спасибо.

1 Ответ

0 голосов
/ 19 мая 2019

Проблемы теперь решены.Первое сообщение об ошибке я решил, добавив:

ACCOUNT_EMAIL_VERIFICATION = None

А для второго мне пришлось добавить max_length = 255 для картинки:

picture = models.ImageField(default='default.jpg', upload_to='profile_pics', max_length=255)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...