Django- проблема входа в систему с моделью AbstractBaseUser

Я создал пользовательскую модель User с моделью AbstractBaseUser. Создание пользователя работает нормально и я проверил на странице администратора.

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

вот мои коды из моего проекта.

models.py

views.py

from django.shortcuts import render, redirect 
from django.contrib import messages
from django.http import HttpRequest
from django.contrib.auth import authenticate, login, logout
from register.models import Member
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, UserManager

# Create your views here.


def loginPage(request):
    global Member
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        print(username)
        print(password)
        try:
            user = Member.objects.get(username=username)
        except:
            messages.error(request, "username does not exist")

        user = authenticate(request, username=username, password=password)

        if user is not None:
            login(request, user)
            return redirect('/')
        else:
            messages.error(request, "username or password does not exit.")

            

    context = {}
    return render(request, 'register/login.html', context)


def logoutUser(request):
    logout(request)
    return redirect('/')

login.html

{% extends 'layout/layout.html' %}

{% block content %}

<div>
    <form method="POST" action="">
        {% csrf_token %}
        <label>Username:</label>
        <input type="text" name="username" placeholder="Enter username" />

        <label>Password:</label>
        <input type="password" name="password" placeholder="Enter Password" />


        <input type="submit" value="Login"/>
    </form>
</div>
{% endblock %}

Пожалуйста, помогите мне!!! Я борюсь с этим уже 2 дня и не могу найти ответ на этот вопрос нигде в интернете.

Вы можете попробовать создать форму входа в Django и аутентифицировать пользователя в чистой функции:

forms.py

class LoginForm(forms.Form):
    username = forms.CharField(max_length=100, label='사용자 이름')
    password = forms.CharField(max_length=100, label='단어', widget=forms.PasswordInput)

    def clean(self):
        username = self.cleaned_data.get('username')
        password = self.cleaned_data.get('password')
        if username and password:
            user = authenticate(username=username, password=password)
            if not user:
                raise forms.ValidationError("사용자 이름 또는 비밀번호를 잘못 입력했습니다!")
        return super(LoginForm, self).clean()

views.py

from .forms import LoginForm

def login_view(request):
    form = LoginForm(request.POST or None)
    if form.is_valid():
        username = form.cleaned_data.get('username')
        password = form.cleaned_data.get('password')
        user = authenticate(username=username, password=password)
        login(request, user)

        return redirect('home')
    context = {"form": form}
    return render(request, 'register/login.html', context)

UPDATE

Итак, я наконец-то решил эту проблему после нескольких дней и часов попыток.

Пока AbstractBaseUser установлен правильно, никаких других проблем с этим нет.

Однако, мне пришлось импортировать 'get_user_model', чтобы получить пользовательскую модель User.

Просто поместите это поверх Views.py

from django.contrib.auth import get_user_model
from .models import "custom_user_name" #This is your own custom user name which you defined in models.py as class custom_user_name(AbstractBaseUser):

# write this too.
User = get_user_model()

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

Надеюсь, это сэкономит время тем, кто тоже столкнется с этой проблемой.

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