2016-07-23 21 views
0

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?

+0

Sie versuchen, richtig melden Sie sich bei Admin hat? Hat Ihr neuer Benutzer Administratorrechte? Is_admin = True? –

+0

@ TinyInstance Danke. Könnten Sie es bitte beantworten, damit ich es annehmen kann? Es könnte anderen auch helfen. – Robin

Antwort

1

Wenn Sie die Admin-Seite einzuloggen versuchen, stellen Sie sicher, dass Ihre neuen Benutzer Admin-Rechte

is_admin=True