Пользовательская модель пользователя, пользовательская аутентификация не работают

Я новичок в Django и работаю над проектом, который требует пользовательской модели пользователя, так как я не требую is_staff, is_superuser, is_admin.

Итак, путем поисков и других способов я создал свою собственную пользовательскую модель. Но она не работает, и я застрял на ней на несколько дней.

Будет огромной помощью, если кто-то сможет помочь мне с кодом.

settings.py


AUTH_USER_MODEL = 'accounts.Usermanagement'

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'accounts.backends.EmailAuthBackend',
]

models.py (models + manager)

backends.py

#backends.py

# from django.contrib.auth.models import User
from django.contrib.auth.hashers import check_password
from django.contrib.auth import get_user_model

Usermanagement = get_user_model()

class EmailAuthBackend:
    def authenticate(self,request,username=None,password=None):
        print(request)
        try:
            user = Usermanagement.objects.get(emailid=username)
            print(password)
            print(user.password)
            # print(check_password(password))
            # print(user.check_password(password))
            if user.check_password(password):
                return user
            return None
            
        except user.DoesNotExist:
            return None
    
    def get_user(self,user_id): 
        try:
            return user.objects.get(pk=user_id)
        except user.DoesNotExist:
            return None

views.py

# views.py

def loginPage(request):
    # POST
    if request.method == 'POST':
        form = AuthenticationForm(request,data=request.POST)

# loginPage.html the html tag has attribute name = username for email , 
# name = password for password

        if form.is_valid(): # Form Valid
            email = request.POST['username']
            password = request.POST['password']
            #Check
            print("EMAIL: ",email)
            print("PASSWORD: ",password)
            # Authentication USER
            user = authenticate(request,username=email,password=password)
            print("Authenticated ",user) # Check
            # check
            print(user)

            if user is not None: # If User found
                login(request,user,backend='accounts.backends.EmailAuthBackend')
                messages.info(request, f"You are now logged in as {email}.")
                return redirect("home")

            else: # If User Not found
                messages.error(request,"User not found")
                return HttpResponse("User not found, not able to login")

        else: # Form InValid
            messages.error(request,"Invalid username or password.")
            return HttpResponse("Form Invalid")
    # GET
    else:
        form = AuthenticationForm()
        context = {"form":form}
        return render(request,"loginPage.html",context=context)

urls.py и другие конфигурации корректны.

Проблемы:

  1. check_password : always False
  2. В БД у меня есть незашифрованный пароль (например: password=admin)
  3. DB - это унаследованная (существующая) DB, поэтому я сначала создал DB, а затем сделал "python manage.py inspectdb", который создал модели для меня, а затем я изменил несколько вещей, но не изменил имена полей или имя db_table.
  4. .
  5. Я очень хорошо отношусь к созданию пользователя через SHELL.
  6. В loginPage.html html тег имеет атрибут name = username для email , name = password для password
  7. .

если будут другие требования, я отредактирую вопросы

я думаю, что вы не можете использовать функцию check_password в вашем случае, потому что она была создана для случая зашифрованного пароля. Просто сделайте user.password == password в вашем EmailAuthBackend

Которая является просто

моделью, благодаря views.py. Полагаю, вы имели в виду переменную там.

Удалите пароль=password в вашем user=self.model()

Это затрудняет обращение к паролю в вашем user.set_password()

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