I was recycling some of my code from an old project (Django 1.7) to use it in a new one (Django 1.8), so I get this Error every time I want to Login It was working well in Django 1.7 For my models I'm using an AbstractBaseUser models.py class Student(AbstractBaseUser, models.Model): email = models.EmailField(max_length=50) user_id = models.CharField(max_length=8, null=False, editable=False, default=id_generator, primary_key=True) first_name = models.CharField(max_length=20) last_name = models.CharField(max_length=20) prom_code = models.CharField(max_length=8, null=False, default="") gender = (("M","Male"),("F","Female"),) gender = models.CharField(max_length=1, choices=gender, default="M", null=False) USERNAME_FIELD = 'email' @property def is_superuser(self): return False def has_perm(self, perm, obj=None): return False def has_module_perms(self, app_label): return False @property def is_staff(self): return False def save(self, **kwargs): if not self.user_id: self.user_id = id_generator() while Student.objects.filter(user_id = self.user_id).exists(): self.user_id = id_generator() super(Student, self).save() I made a custom Authentication auth_backend.py from registration_app.models import Student import md5 class ClientAuthBackend(object): def authenticate(self, username=None, password=None): try: user = Student.objects.get(email=username) password_ver = md5.new(password).hexdigest() if user.check_password(password_ver): return user else: print("Entre aqui") return None except Student.DoesNotExist: print("Entre aqui2") return None def get_user(self, user_id): try: user = Student.objects.get(user_id=user_id) if user is not None: return user except Student.DoesNotExist: return None views.py def user_login(request): args = {} form = LoginForm(request.POST) username = request.POST.get('email', '') password = request.POST.get('password', '') user = authenticate(username=username, password=password) if user is not None: print user.first_name + " ah iniciado session" login(request, user) #-----**Here is where i get the problem**----- return HttpResponseRedirect('/user/') else: print("El usuario no existe") args['form'] = form return render(request, 'user_student/login.html', args) In my command prompt I can actually see the user getting logged in (it brings me the name of the user) Continue reading...