'Django Unable to login

Login and Log out is only working for admin panel , not for user panel , after loging in from user end , its not getting reflected in the home screen . The default login(request,user) is not setting user to request.user . Thats why after loging in when redirecting to home page there request.user in home page request.user is showing anonymous user instead of loged in user . How to solve this ?

I am using custom user model .

If it could be solved by Application Backend , then Show How .

models.py

from django.db import models

# Create your models here.
from django.contrib.auth.models import AbstractBaseUser , PermissionsMixin
from .UserManager import UserManager
from datetime import datetime

class User(AbstractBaseUser,PermissionsMixin):
   username = None
   FullName = models.CharField(max_length=50)
   Email = models.EmailField(unique=True)
   Uid = models.CharField(max_length=6,default="TD")
   SignUpTime = models.CharField(default=((datetime.today()).strftime("%H:%M >> %a %d-%b-%Y")),max_length=25)
   is_staff = models.BooleanField(default=False)
   is_superuser=models.BooleanField(default=False)
   is_active=models.BooleanField(default=False)

   objects = UserManager()

   USERNAME_FIELD = 'Email'
   REQUIRED_FIELDS = ["FullName"]

UserManager.py

from django.contrib.auth.base_user import BaseUserManager
from django.contrib.auth.hashers import check_password


class UserManager(BaseUserManager):
   
   use_in_migrations = True

   def create_user(self,Email,password,**extra_fields):
      if not Email:
         raise ValueError("Email is Required")
      email = self.normalize_email(Email)
      user = self.model(Email=email,**extra_fields)
      user.set_password(password)
      user.save()
      user = self.model.objects.get(Email=email)
      return user
   

   def create_superuser(self,Email,password,**extra_fields):
      extra_fields.setdefault('is_staff',True)
      extra_fields.setdefault('is_superuser',True)
      extra_fields.setdefault('is_active',True)

      if extra_fields.get('is_staff') != True:
         raise ValueError("not a staff")
      if extra_fields.get("is_superuser") != True:
         raise ValueError("not a Superuser")

      return self.create_user(Email,password,**extra_fields)
   


   def authenticate (self,UiD,password):
      user = self.model.objects.get(Uid=UiD)
      print(user)
      try :
         if check_password(password, user.password) :
            print(user)
            return user
      except:
         return None

views.py

from django.shortcuts import render , redirect
from django.http import HttpResponse
from .models import User
from django.contrib.auth.models import auth
from django.contrib.auth import login , logout
from django.contrib import messages
from .util import *

# Create your views here.

def home(request):
   user = request.user
   print(user)
   return render(request, "home.html",{'user':request.user})

def signUp(request):

   if request.method == "POST" :
      
      f_name = request.POST.get('f_name'),
      email = request.POST.get('email'),
      password = request.POST.get('password'),

      user = User.objects.create_user(Email ="".join(email),password="".join(password),FullName="".join(f_name))
      
      uid = getUid(user.id)
      user.Uid = uid
      user.save()
      return redirect("/",{'user':user})

   else :
      return render(request, "signUp.html")

def signIn(request):

   if request.method == "POST" :
      uid = request.POST.get('uid')
      pwd = request.POST.get('password')
      user = User.objects.authenticate(UiD= uid , password=pwd)
      if user != None:
         login(request,user)
         print(request.user)
         return redirect("/") 
      else :
         print("fAILED")
         messages.info(request,"invalid details")
         return render(request, "signIn.html")
   else :
      return render(request, "signIn.html")

def logout(request):
   logout(request)
   return redirect("/")


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source