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 запрещает аутентификацию неактивных пользователей. Вы не указали статус пользователя. Поэтому, пожалуйста, проверьте статус пользователя.