Ich habe ein benutzerdefiniertes Benutzermodell und seinen Benutzermanager.django - Ich kann mich nicht mit den Benutzerdaten anmelden
class CustomUserManager(BaseUserManager):
def _create_user(self, email, username, password, first_name, last_name, date_of_birth, gender, mobile_number,
is_active, is_admin, is_superuser):
"""
Creates and saves a user with given email and password
"""
if not email:
raise ValueError('Email must be set')
email = self.normalize_email(email)
now = timezone.now()
user = self.model(
email=email,
username=username,
first_name=first_name,
last_name=last_name,
date_of_birth=date_of_birth,
gender=gender,
mobile_number=mobile_number,
date_joined=now,
is_active=is_active,
is_admin=is_admin,
is_superuser=is_superuser,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, username, password, first_name, last_name, date_of_birth, gender, mobile_number, **extra_fields):
user = self._create_user(email, username, password, first_name, last_name, date_of_birth, gender, mobile_number, True, False, False, **extra_fields)
user.save(using=self._db)
return user
def create_superuser(self, email, username, password, first_name, last_name, date_of_birth, gender, mobile_number, **extra_fields):
user = self._create_user(email, username, password, first_name, last_name, date_of_birth, gender, mobile_number, True, True, True, **extra_fields)
user.save(using=self._db)
return user
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), max_length=254, unique=True)
username = models.CharField(_('user name'), max_length=254, unique=True)
first_name = models.CharField(_('first name'), max_length=30)
last_name = models.CharField(_('last name'), max_length=30)
date_of_birth = models.DateField()
gender = models.CharField(choices=GENDERTYPE, max_length=1)
mobile_number = models.IntegerField(unique=True)
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
objects = CustomUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username', 'first_name', 'last_name', 'date_of_birth', 'gender', 'mobile_number']
...
...
Und das Modell zu bearbeiten, habe ich eine benutzerdefinierte Erstellung forms.py
class UserCreationForm(forms.ModelForm):
password = forms.CharField(label='Password', widget=forms.PasswordInput)
class Meta:
model = CustomUser
fields = ('email', 'username', 'first_name', 'last_name', 'date_of_birth', 'gender', 'mobile_number')
def save(self, commit=True):
# Save the provided password in hashed format
user = super(UserCreationForm, self).save(commit=False)
user.set_password(self.cleaned_data["password"])
print self.cleaned_data["password"]
if commit:
user.save()
return user
class UserChangeForm(forms.ModelForm):
password = ReadOnlyPasswordHashField()
class Meta:
model = CustomUser
fields = (
'email', 'username', 'first_name', 'last_name', 'date_of_birth', 'gender', 'mobile_number', 'is_active',
'is_admin'
)
def clean_password(self):
return self.initial["password"]
kann ich einen neuen Benutzer speichern und erstellen. Außerdem kann ich das gehashte Passwort im Admin sehen. Wenn ich jedoch versuche, mich mit den email
und password
des neuen Benutzers anzumelden, werde ich nicht authentifiziert. Ich habe auch versucht, mit dem username
und dem password
einzuloggen, aber das hat auch nicht funktioniert.
Um zu überprüfen, ob ich tatsächlich ein Passwort bekomme, habe ich versucht, die self.cleaned_data["password"]
in der UserCreationForm
zu drucken, und in der Konsole kann ich das Passwort sehen, das ich gab. Wenn ich mich jedoch im Admin anmelde, kann ich mich nicht anmelden. Aber noch einmal, mit den Anmeldeinformationen des Superusers kann ich mich anmelden. Was mache ich hier falsch?
Sie versuchen, richtig melden Sie sich bei Admin hat? Hat Ihr neuer Benutzer Administratorrechte? Is_admin = True? –
@ TinyInstance Danke. Könnten Sie es bitte beantworten, damit ich es annehmen kann? Es könnte anderen auch helfen. – Robin