Hardik Jain
Hardik Jain

Reputation: 1

Issue with Django Login Form: Form is Invalid Despite Correct Credentials

I've been facing an issue with my Django login form. Despite providing the correct credentials, the form consistently returns as invalid. Here’s a detailed description of my setup and the problem I’m encountering.

Description

I'm using Django's AuthenticationForm to handle user login. My goal is to authenticate users and redirect them to a specific page upon successful login. However, the form validation fails even though the credentials are accurate and the user exists in the database.

form.py


        from django import forms
    from .models import UserRegister
    from django.contrib.auth.models import User
    from django.contrib.auth.forms import UserCreationForm , AuthenticationForm
    from django.core.exceptions import ValidationError
    
    class UserRegisterForm(UserCreationForm):
        username = forms.CharField(max_length=50, required=True, widget=forms.TextInput(attrs={'placeholder': 'Username', 'class': 'input-group'}))
        email = forms.EmailField(max_length=70, required=True, widget=forms.EmailInput(attrs={'placeholder': 'Email', 'class': 'input-group'}))
        password1 = forms.CharField(max_length=128, required=True, widget=forms.PasswordInput(attrs={'placeholder': 'Password', 'class': 'input-group', 'id': 'password'}))
        password2 = forms.CharField(max_length=128, required=True, widget=forms.PasswordInput(attrs={'placeholder': 'Confirm Password', 'class': 'input-group', 'id': 'password'}))
    
        class Meta:
            model = UserRegister
            fields = ['username', 'email', 'password1', 'password2']
            error_messages = {
            "password_mismatch": "Conform Password Does not match with Password"
        }
    
        def clean_email(self):
            email = self.cleaned_data.get('email')
            if UserRegister.objects.filter(email=email).exists():
                raise ValidationError('This email address is already in use.')
            return email
        
        def clean_username(self):
            username = self.cleaned_data.get('username')
            if UserRegister.objects.filter(username=username).exists():
                raise ValidationError('This username is already in use.')
            return username
    
        def clean_password2(self):
            password1 = self.cleaned_data.get('password1')
            password2 = self.cleaned_data.get('password2')
            if password1 and password2 and password1 != password2:
                raise ValidationError(self.error_messages['password_mismatch'], code='password_mismatch')
            return password2
    
    
    class UserLoginForm(AuthenticationForm):
        username = forms.CharField(max_length=50, required=True ,widget=forms.TextInput(attrs={'placeholder':'Username','class':'input-group'}))
        password = forms.CharField(max_length=128,required=True,widget=forms.PasswordInput(attrs={'placeholder':'Password','class':'input-group'}))
    
        class Meta:
            model= User
            field=['username','password']


views.py


    from django.shortcuts import render, redirect
    from django.http import HttpResponseRedirect, Http404
    from .forms import UserRegisterForm, UserLoginForm
    from django.contrib import messages
    from .models import UserRegister
    from django.contrib.auth import authenticate, login
    
    # Create your views here.
    
    products = [
        {
            "slug": "Mustang-GT",
            "About": """The Ford Mustang GT in its stunning white color is nothing short of a modern-day classic. From the moment you lay eyes on 
            it, the Mustang's sleek and muscular design commands attention and admiration. The pristine white finish only adds to its allure, 
            giving it a timeless, elegant look that stands out on the road. Performance: Under the hood, the Mustang GT roars to life with its 
            5.0-liter V8 engine, delivering a thrilling 450 horsepower. The acceleration is exhilarating, and the handling is precise, making 
            every drive a memorable experience. Whether you're cruising down the highway or taking on winding roads, the Mustang GT's performance
            is unmatched in its class. Interior: Step inside, and you're greeted with a blend of classic muscle car ambiance and modern 
            sophistication. The leather seats are comfortable and supportive, perfect for long drives. The dashboard is well-designed,
            with intuitive controls and a high-quality infotainment system that keeps you connected and entertained. Driving Experience: 
            Driving the Mustang GT is an absolute joy. The sound of the engine is music to any car enthusiast's ears, and the responsive 
            steering makes you feel in complete control. The car's suspension strikes a perfect balance between comfort and sportiness, 
            ensuring a smooth ride even on less-than-perfect roads. Conclusion: The Ford Mustang GT in white is a perfect blend of beauty,
            power, and sophistication. It's a car that not only performs exceptionally well but also turns heads wherever it goes. 
            Whether you're a long-time Mustang fan or new to the world of muscle cars, this vehicle will exceed your expectations. 
            Highly recommended for anyone looking for a thrilling and stylish driving experience.""",
            "image": "images/car.jpg"
        }
    ]
    
    def Home(request):
        return render(request, "home.html")
    
    def SignUp(request):
        if request.method == "POST":
            form = UserRegisterForm(request.POST)
            if form.is_valid():
                form_info = UserRegister(
                    username=form.cleaned_data.get('username'),
                    email=form.cleaned_data.get('email'),
                    password=form.cleaned_data.get('password1')
                )
                form_info.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})
    
    def Products(request):
        return render(request, "products.html")
    
    def about_product(request, slug):
        for product in products:
            if product["slug"] == str(slug):
                return render(request, "about_product.html", {"product": product})
        raise Http404("Product not found")
    
    def Login(request):
        if request.method == "POST":
            form = UserLoginForm(request.POST)
            print(form.is_bound)
            if form.is_valid():
                user = authenticate(
                    request, 
                    username=form.cleaned_data.get('username'), 
                    password=form.cleaned_data.get('password')
                )
                if user is not None:
                    login(request, user)
                    return HttpResponseRedirect('/Products')
            else:
                print("Form is not valid")
                print(form.errors)
                print(form.non_field_errors)
        else:
            form = UserLoginForm()
        return render(request, "Login.html", {'form': form})


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='Log')]

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 %}
        <form method="POST" action="{% url 'Log' %}">
            {% 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 %}


terminal:-

False (print(form.is_bound)) Form is not valid

<bound method BaseForm.non_field_errors of > (print(form.non_field_error))

Upvotes: 0

Views: 45

Answers (0)

Related Questions