2016-07-06 13 views
1

私はカスタムユーザーmodulで助けていただきありがとうございます。私はdjango documentationのこの例に類似してそれを設定しました。私は以下の問題を抱えています:Djangoの管理者にログイン

  1. 管理者インターフェイスにログインできません。ログインページが表示されますが、シェルで./manage createsuperuserを使用してユーザーを作成した後で、資格情報を受け入れません。
  2. スーパーユーザーを作成するときは、最初にパスワードを平文で保存します。私はデータベースを見て、クリアテキストでパスワードを見つけました。これはcreate_superuser()から来ていると思いますが、user.set_password()は使用されていませんがpassword = passwordです(djangoのドキュメントの例のように、なぜそうするのですか?)。私はそれをシェルで変更してから暗号化しました。まだログインしてもうまくいきません。 認証/ models.py

    class UserManager(BaseUserManager): 
    
    def create_user(self, email, password=None, **kwargs): 
    
        if not email: 
         raise ValueError('Users must have an email address') 
    
        user = self.model(
         email=self.normalize_email(email), 
         **kwargs 
        ) 
        user.set_password(password) 
        user.save(using=self._db) 
        return user 
    
    def create_superuser(self, email, password, **kwargs): 
        user = self.model(
         email, 
         password=password, 
         **kwargs 
        ) 
        user.is_admin=True 
        user.save(using=self._db) 
        return user 
    

    class MyUser(AbstractBaseUser): 
    # use this for auth and sessions 
    # REQUIRED_FIELDS = ['password'] 
    
    session = models.ForeignKey(
        'sessions.Session', 
        verbose_name='Session', 
        blank=True, null=True, 
    ) 
    email = models.EmailField(unique=True, primary_key=True) 
    #password = forms.CharField(max_length=30, widget=forms.PasswordInput()) #render_value=False 
    first_name = models.CharField(max_length=255) 
    last_name = models.CharField(max_length=255) 
    signed_up_since = models.DateTimeField('Signed up since', default=timezone.now()) 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 
    
    objects = UserManager() 
    USERNAME_FIELD = 'email' 
    
    def __str__(self): 
        return self.email 
    
    def get_full_name(self): 
        return self.email 
    
    def get_short_name(self): 
        return self.email 
    
    @property 
    def is_staff(self): 
        "Is the user a member of staff?" 
        # Simplest possible answer: All admins are staff 
        return self.is_admin 
    

    私は、設定を編集した:

    AUTH_USER_MODEL = "authentication.MyUser" 
    

    は私がカスタムを使用していけない私のコードは以下の通りである

セッションのバックエンドまたは認証のバックエンドでは、migrシェルは私にこれを与える:

>>> user.is_staff 
True 

アイデアは何ですか?どうもありがとう!

答えて

1

create_userメソッドでself.model()を使用しているユーザーを作成しているという問題があります。これにより、パスワードがプレーンテキストとして保存されます。

example in the docsのようにcreate_userメソッドを使用する必要があります。これにより、パスワードが正しくハッシュされます。

def create_superuser(self, email, password, **kwargs): 
    user = self.create_user(
     email, 
     password=password, 
     **kwargs 
    ) 
関連する問題