Как аутентифицировать учетные данные формы пользователя из PostgreSQL с помощью Django

Я могу регистрировать пользователей в моей пользовательской таблице в базе данных Postgres. Я хотел бы знать, как я могу использовать учетные данные из моей таблицы Postgres для аутентификации входа в систему из моего веб-приложения django. Я знаю, что мне нужно создать пользовательский бэкенд, но я не знаю, как мы можем импортировать учетные данные из Postgres для аутентификации по учетным данным, которые ввел пользователь.

Моя модель:

from django.conf import settings
from django.db import models
from django.contrib.auth.models import User
from django.contrib.auth.models import AbstractBaseUser

# Create your models here.

# Database model Users has one to one relationship with Django User table
from django.db.models.signals import post_save
from django.dispatch import receiver


class Profile(AbstractBaseUser):

    first_name = models.TextField()
    last_name = models.TextField()
    user = models.OneToOneField(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    user_name = models.TextField(unique=True)
    email = models.TextField()
    password1 = models.TextField()
    password2 = models.TextField()
    date_created = models.DateTimeField(auto_now_add=True)

    USERNAME_FIELD = 'user_name'
    REQUIRED_FIELDS = []

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

    @receiver(post_save, sender=User)
    def update_profile_signal(sender, instance, created, **kwargs):
        if created:
            Profile.objects.create(user=instance)
        instance.profile.save()

У меня есть мой проект django, указывающий на мою пользовательскую модель пользователя тоже.

Я просто не знаю, как создать пользовательский бэкэнд для аутентификации. Если бы меня могли направить на это, я был бы очень признателен.

Если вы задаете пароль для каждого пользователя при создании нового пользователя, бэкенд аутентификации по умолчанию для Django будет отлично работать. При сохранении нового Profile вам следует просто сделать instance.set_password(password) после проверки того, что password и password2 одинаковы.

Также я бы рекомендовал не использовать приемник, а поддерживать CustomManager для вашей таблицы.

На данный момент это должно помочь вам:

@receiver(post_save, sender=User)
    def update_profile_signal(sender, instance, created, **kwargs):
        if created:
            Profile.objects.create(user=instance)
        if password == password2:
            instance.set_password(password)
        instance.profile.save()

Тогда вы можете ограничить доступ к Views с помощью декоратора @login_required. Некоторые другие способы упоминаются здесь

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