Django не пересчитывает пароль пользователя при попытке входа в систему

При попытке создать простую веб-страницу с логином и регистрацией я столкнулся с проблемой того, что django не распознает созданного пользователя. В views.py я создал простое сообщение, которое выводит "Неверный пароль или email", если пользователь не существует. Я создал пользователя и убедился, что пароль был правильным, когда я вводил его в форму входа, однако он все равно выдал мне сообщение "Incorrect password or email". Вместо того, чтобы перенаправить на домашнюю страницу, как это должен делать созданный пользователь, он ошибается, и я не могу понять, почему он не принимает пароль/электронную почту в форме.

views.py

from django.shortcuts import redirect, render
from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
from django.contrib.auth.models import User

def home(request):
    return render(request, 'home.html')


def signup(request):

    if request.method == "POST":
        email = request.POST['email']
        password = request.POST['password']

        myuser = User.objects.create_user(email, password)
        myuser.email = email
        myuser.password = password

        myuser.save()
    
        messages.success(request, "Your account has been successfully created ")

        return redirect('signin')

    return render(request, 'signup.html')

def signin(request):

    if request.method == "POST":
        email = request.POST['email']
        password = request.POST['password']

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


        if user is not None: 
            login(request, user)
            email = user.email 
            messages.success(request, "Successfully Logged In")
            return redirect ('home')


        else:
            messages.info(request, "Email or Password is Incorrect")
            return render(request, 'signin.html')

    return render(request, 'signin.html')


def signout(request):
    pass 

urls.py

from django.urls import path
from . import views
from django.contrib.staticfiles.urls import staticfiles_urlpatterns


urlpatterns = [
    path('', views.home, name = "home"),
    path('signin', views.signin, name = "signin"),
    path('signup', views.signup, name = "signup"),
]  

urlpatterns += staticfiles_urlpatterns()

signup.html

<h1>Sign up</h1>

<form action = "/signup" method = "POST">
  {% csrf_token %}
    <div class="mb-3">
      <label for="exampleInputEmail1" class="form-label">Email address</label>
      <input type="email" class="form-control" id="email" name = "email" aria-describedby="emailHelp" placeholder = "example@example.com">
      
    <div class="mb-3">
      <label for="exampleInputPassword1" class="form-label">Password</label>
      <input type="password" class="form-control" id="password" name = "password">
    </div>
    <button type="submit" class="btn btn-primary">Sign up</button>
  </form>
  
  

signin.html (страница входа в систему)

<h1>Login</h1>
{%if messages%}
  {%for message in messages%}
<div class="alert alert-warning alert-dismissible fade show" role="alert">
    <strong>Hey,</strong> {{ message }}
    <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
  {% endfor %}
{% endif %}

<form action = "/signin" method = "POST"> 
  {% csrf_token %}
  <div class="row mb-3">
    <label for="inputEmail3" class="col-sm-2 col-form-label">Email</label>
    <div class="col-sm-10">
      <input type="email" class="form-control" id="email" name = "email">
    </div>
  </div>
  <div class="row mb-3">
    <label for="inputPassword3" class="col-sm-2 col-form-label">Password</label>
    <div class="col-sm-10">
      <input type="password" class="form-control" id = "password" name = "password">
    </div>
    <div class="col-sm-10">
  </div>
  <button type="submit" class="btn btn-primary">Sign in</button>
</form>
  

Вы можете улучшить эту часть следующим образом:

myuser = User(email=email)
myuser.set_password(password)
myuser.save()

Для установки пароля необходимо использовать функцию set_password.

Каков статус вашего пользователя. Неактивным пользователем считается тот, у которого поле is_active установлено в False. Бэкенд по умолчанию ModelBackend и RemoteUserBackend запрещает аутентификацию неактивных пользователей. Вы не указали статус пользователя. Поэтому, пожалуйста, проверьте статус пользователя.

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