2016-07-23 33 views
0

私はカスタムユーザーモデルとそのユーザーマネージャーを持っています。django - ユーザー資格情報でログインできません

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'] 
    ... 
    ... 

とモデルを処理するためには、私が保存して、新規ユーザーを作成することができます

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"] 

forms.pyカスタムユーザーを作成しています。また、管理者にハッシュされたパスワードが表示されます。しかし、新しいユーザーのemailpasswordでログインしようとすると、私は認証されていません。私もusernamepasswordでログインしようとしましたが、それもうまくいきませんでした。

パスワードが実際に取得されているかどうかを確認するには、があります。にself.cleaned_data["password"]を印刷しました。コンソールには私が確認したパスワードが表示されます。ただし、管理者でログインしようとするとログインできません。しかし、再び、スーパーユーザーの資格情報で、私はログインできます。私はここで間違って何をしていますか?

+0

を持っていることを確認してください?あなたの新しいユーザは管理権限 'is_admin = True'を持っていますか? –

+0

@TinyInstanceありがとうございます。私はそれを受け入れることができるように答えてください。他人にも役立つかもしれない。 – Robin

答えて

1

あなたはadminサイトにログインしようとしている場合は、新しいユーザーが、あなたは正しい管理するには、ログインしようとしている管理者権限

is_admin=True

関連する問題