I define a custom User model:
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
somefield = models.CharField(max_length=60)
and I add AUTH_USER_MODEL to settengs :
AUTH_USER_MODEL = 'userm.CustomUser'
but when I try this command the authenticate function return None:
In [36]: from django.contrib.auth import authenticate
In [37]: CustomUser.objects.create(username='root',password='root')
Out[37]: <CustomUser: root>
In [38]: authenticate(username='root', password='root')
and the result of objects.all is:
In [47]: CustomUser.objects.all()
Out[47]: [<CustomUser: admin>, <CustomUser: nima>, <CustomUser: ali>, <CustomUser: root>, <CustomUser: esi>, <CustomUser: sha>]
am I missed something??
Probably the problem is that the password is not saved correctly with the create
method.
Instead try doing this
u=CustomUser.objects.create(username='root1')
u.set_password('root')
u.save()
Then
authenticate(username='root1', password='root')
will work (at least it worked in my case).
Update: Also, please take a look at the create_user
of the
django ducmentation custom user:
def create_user(self, email, date_of_birth, password=None):
# [...]
user = self.model(
email=self.normalize_email(email),
date_of_birth=date_of_birth,
)
# Explicitly set password with the set_password method
user.set_password(password)
user.save(using=self._db)
return user
So you should not use CustomUser.objects.create
to set the password.