Имя пользователя и выход из системы не отображаются при входе в систему через google

Я сделал свои модели для клиента, торговца.

models.py

class CustomUser(AbstractUser):
    is_customer = models.BooleanField(default=False)
    is_merchant = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)

class Customer(models.Model):
    user = models.OneToOneField(CustomUser, on_delete=models.CASCADE, related_name = 'customer', null=True, blank=True)
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)
    username = models.CharField(max_length=255)
    email = models.EmailField(max_length=255)
    phone_number = models.CharField(max_length=12)
    address = models.CharField(max_length=255)
    profile_pic=models.FileField(default="")
    created_at=models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.username

Когда клиент входит в приложение, он видит свое имя пользователя в навигационной панели, а кнопка "войти" превращается в "выйти". Теперь я хочу дать клиентам функциональность для входа в систему с помощью google.

settings.py

ALLOWED_HOSTS = ['localhost']

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'projectapp.apps.ProjectappConfig',
'django_extensions',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.google',
'allauth.socialaccount.providers.facebook',
]
SITE_ID=1
LOGIN_REDIRECT_URL = '/'
DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql',
    'NAME': 'reward_database',
    'USER': 'postgres',
    'PASSWORD': 'ReVerSe@05',
    'HOST': 'localhost',
    'PORT': '5432'
}
}
AUTHENTICATION_BACKENDS = [

# Needed to login by username in Django admin, regardless of `allauth`
'django.contrib.auth.backends.ModelBackend',

# `allauth` specific authentication methods, such as login by e-mail
'allauth.account.auth_backends.AuthenticationBackend',


]

SOCIALACCOUNT_PROVIDERS = {
'google': {
    'SCOPE': [
        'profile',
        'email',
    ],
    'AUTH_PARAMS': {
        'access_type': 'online',
    }
}
}

Для этих целей у меня есть файл signal.py.

@receiver(post_save, sender = CustomUser)
def customer_create(sender, instance, created, *args, **kwargs):
    if created:
        customer = Customer(user=instance)
        customer.save()

Моя первая проблема заключается в том, что в тестовом состоянии мой клиент может войти в систему через google, но кнопка "войти" не переключается на "выйти" и имя пользователя не появляется. В админке django я вижу, что есть пользователь со всеми деталями, но пустой клиент, в котором я не могу ввести больше информации.

Другая проблема заключается в том, что из-за наличия signals.py я не могу зарегистрироваться на сайте с помощью формы регистрации. Это дает мне следующую ошибку.

IntegrityError at /customer_register/

Но без signals.py я могу зарегистрировать клиента с помощью формы регистрации.

Как я могу указать, что сигнал будет использоваться только для клиентов, которые входят в систему с помощью google?

Вернуться на верх