Пользовательский логин Django не проходит аутентификацию

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

Мой loginclass в forms.py

class LoginForm(forms.Form):
    email    = forms.EmailField(label='Email')
    password = forms.CharField(widget=forms.PasswordInput)

    def __init__(self, request, *args, **kwargs):
        self.request = request
        super(LoginForm, self).__init__(*args, **kwargs)

    def clean(self):
        request = self.request
        data = self.cleaned_data
        email  = data.get("email")
        password  = data.get("password")
        qs = User.objects.filter(email=email)
        if qs.exists():
            # user email is registered, check active/
            not_active = qs.filter(is_active=False)
            if not_active.exists():
                raise forms.ValidationError("This user is inactive.")
        
        user = authenticate(request, email=email, password=password)
        
        if user is None:
            raise forms.ValidationError("Invalid credentials")
        
        login(request, user)
        self.user = user
        
        return data

Это из моего файла views.py

User = get_user_model()

def login_page(request):
    form = LoginForm(request.POST or None)
    context = {
        "form": form
    }   
    if form.is_valid():
        email = form.cleaned_data.get("email")
        password  = form.cleaned_data.get("password")
        user = authenticate(request, email=email, password=password)
        if user is not None:
            login(request, user)
        else:
            # Return an 'invalid login' error message.
            print("Error")
    return render(request, "accounts/login.html", context)

В моем settings.py я установил

LOGIN_REDIRECT_URL = '/'

Мой html здесь

<form method="post">
                            {% csrf_token %}
                            {{ form.non_field_errors }}
                            {{ form.source.errors }}
                            {{ form.source }}
                            <div class="form-group">
                                <input class="form-control" 
                                type="email" 
                                name="{{ form.email.name }}"
                                id="{{ form.email.id_for_label }}"
                                {% if form.email.value != None %}value="{{ form.email.value|stringformat:'s' }}"{% endif %}
                                {% if form.email.field.required %}required{% endif %}
                                placeholder="Email Address" />
                            </div>
                            <div class="form-group">
                                <input class="form-control" 
                                type="password" 
                                name="{{ form.password.name }}"
                                id="{{ form.password.id_for_label }}"
                                {% if form.password.value != None %}value="{{ form.password.value|stringformat:'s' }}"{% endif %}
                                {% if form.password.field.required %}required{% endif %} 
                                placeholder="*********" />
                                <div class="text-right">
                                    <small><a href="#">Forgot password?</a></small>
                                </div>
                            </div>
                            <button class="btn btn-lg btn-block btn-primary" role="button" type="submit">
                                Log in
                            </button>
                            <small>Don't have an account yet? <a href="#">Create one</a></small>
                        </form>

Я не могу получить сообщение об ошибке, сервер возвращает POST 200, но не login inn... Я уверен, что я что-то напутал, но не могу понять, где именно.

Моя догадка заключается в том, что форма не действительна по предоставленному вами описанию. Попробуйте напечатать form.errors после вызова form.is_valid() и посмотреть, правильно ли отправлена ваша форма.

Согласно вашему коду, если форма недействительна, пользователь не будет аутентифицирован.

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