Имя пользователя и выход из системы не отображаются при входе в систему через 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?