Не удается перенаправить на следующую страницу после успешного входа в систему в Django

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

Views.py

Urls.py

from django.urls import path
from . import views

urlpatterns=[path("Home",views.Home),
             path("SignUp",views.SignUp,name='signup'),
             path("Products",views.Products,name="Products"),
             path('Products/<slug:slug>',views.about_product,name="About Product"),
             path("login",views.Login,name='login'),
             path('logout',views.logout,name='logout')]

login.html

{% extends "base.html" %}

{% block title %}
Login
{% endblock %}

{% load static %}

{% block css_files %}
<link rel="stylesheet" href="{% static 'reviews/Login.css' %}">
{% endblock %}

{% block content %}

    {% if next %}
        <form action="{% url 'login' %}?next={{ next }}" method="POST" >
    {%else%}
        <form method="POST" action="{% url 'login' %}">
    {% endif %}

        {% csrf_token %}
        <div class="input-section">
            
            {% if form.non_field_errors %}
                <div class="error-message">
                    {% for error in form.non_field_errors %}
                        <p>{{ error }}</p>
                    {% endfor %}
                </div>
            {% endif %}
            
            <div class="input-group">
                <label for="{{ form.username.id_for_label }}">Username</label>
                {{ form.username }}
                {% if form.username.errors %}
                    <div class="error-message">
                        {% for error in form.username.errors %}
                            <p>{{ error }}</p>
                        {% endfor %}
                    </div>
                {% endif %}
            </div>

            <div class="input-group">
                <label for="{{ form.password.id_for_label }}">Password</label>
                {{ form.password }}
                {% if form.password.errors %}
                    <div class="error-message">
                        {% for error in form.password.errors %}
                            <p>{{ error }}</p>
                        {% endfor %}
                    </div>
                {% endif %}
            </div>
            <button class="submit-btn" type="submit">Login</button>
        </div>
    </form>
{% endblock %}

settings.py

Система аутентификации Djangos использует встроенную модель USER, которая может быть импортирована из django.contrib.auth.models.User. Но в вашей функции регистрации вы сохраняете учетные данные вручную в пользовательской модели UserRegister без хэширования пароля. Ваша текущая функция сохраняет пароль в виде текста.

form_info = UserRegister(
    username=form.cleaned_data.get('username'),
    email=form.cleaned_data.get('email'),
    password=form.cleaned_data.get('password1')  # ❌ Password should be hashed
)
form_info.save()

Затем в вашей функции входа в систему вы используете authenticate(), которая работает только в том случае, если пользователь существует в модели пользователя Django по умолчанию. Django's authenticate() не распознает ваш пользовательский интерфейс UserRegister.

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

from django.contrib.auth.models import User  # Import Django's built-in User model

def SignUp(request):
    if request.method == "POST":
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            user = User.objects.create_user(
                username=form.cleaned_data.get('username'),
                email=form.cleaned_data.get('email'),
                password=form.cleaned_data.get('password1')  # ✅ Password is now hashed
            )
            user.save()
            messages.success(request, 'Your account has been created!')
            return HttpResponseRedirect('/Products')
        else:
            print("Form is not valid")
            print(form.errors)
    else:
        form = UserRegisterForm()
    return render(request, 'SignUp.html', {'form': form})

Кроме того, для пользовательского UserRegister расширьте встроенный в Django AbstractUser

from django.contrib.auth.models import AbstractUser

class UserRegister(AbstractUser):
    pass  # Use Django's built-in authentication fields
Вернуться на верх