自定义的用户认证如何登录使用Django自带的后台管理?

fanjl92 发布于 2015/05/10 14:02
阅读 3K+
收藏 0

自己定义了一个User类继承了AbstractBaseUser,一个UserManager类继承了BaseUserManager,并且写了相应的登录后端AuthBackend实现了authenticate方法和get_user方法。

在运行sycndb时也创建了超级用户,然而我在/admin/链接中却无法登录自带的管理后台。相关代码贴在下面,请各位帮我看看是什么问题? 

另:我看了官方文档的相关部分(https://docs.djangoproject.com/en/1.7/topics/auth/customizing/),里面在讲到Custom users and django.contrib.admin时说 if your User model extends AbstractBaseUser, you’ll need to define a custom ModelAdmin class.这个我没有做过也不知道怎么做,不知问题是不是在这里。


我的app名为user_auth,以下是models.py的内容

from django.db import models
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser, PermissionsMixin

class UserManager(BaseUserManager):  
           def create_user(self, email, password=None):  
        user = self.model(  
            email = UserManager.normalize_email(email),  
            is_staff = False,  
            is_active = True,
            )  
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password):
        user = self.create_user(
            email = email,
            password = password,
            )
        user.is_active = True
        user.is_superuser = True
        user.save(using=self._db)
        return user

class User(AbstractBaseUser, PermissionsMixin):
    """docstring for User"""
    email = models.EmailField(max_length=50, unique=True, db_index=True)
    is_active = models.BooleanField('active', default=True)
    is_staff = models.BooleanField('staff', default=True)

    USERNAME_FIELD = 'email'
    objects = UserManager()

    def get_full_name(self):
        return self.email

    def get_short_name(self):
        return self.email

    def __unicode__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True



auth.py

rom user_auth.models import User

class AuthBackend(object):
    """docstring for AuthBackend"""
    def authenticate(self, email=None, password=None):
        try:
            user = User.objects.get(email=email)
        except User.DoesNotExist:
            return None
        else:
            if user.check_password(password):
                return user
            else:
                return None

    def get_user(self, user_id):
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None



在settings.py中添加了

AUTHENTICATION_BACKENDS = (
    'user_auth.auth.AuthBackend' ,
)

AUTH_USER_MODEL = 'user_auth.User'



加载中
0
fanjl92
fanjl92
刚才自己写了登录的表单以及方法,发现在登录后把URL改成/admin/直接访问有效,推测是admin自带的表单不适应我的User模型,具体如何修改,还不明白。
0
slider
slider

引用来自“fanjl92”的评论

刚才自己写了登录的表单以及方法,发现在登录后把URL改成/admin/直接访问有效,推测是admin自带的表单不适应我的User模型,具体如何修改,还不明白。
解决了吗?我目前也遇到这种问题。
返回顶部
顶部