TypeError:get_session_auth_hash()缺少1个必需的位置参数:'self'

时间:2015-10-07 10:58:27

标签: python django

我正在学习django尝试实现自定义用户模型,但每次我尝试使用它登录/ admin时,我都会得到两个结尾的长回溯列表

TypeError: get_session_auth_hash() missing 1 required positional argument: 'self'

跟踪中的单个文件或调用都不是我的文件之一

以防这里是我的模型和后端文件

models.py

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

class UserManager(BaseUserManager):
    """
    Custom user manager
    """
    def create_user(self, username, password):
        if not username or not password:
            raise ValueError("We need username and password here...")
        user = self.model(username=username)
        user.set_password(password)
        user.save()
        return user
    def create_superuser(self, username, password):
        if not username or not password:
            raise ValueError("We need username and password here...")
        user = self.create_user(username=username,password=password)
        user.set_password(password)
        user.is_admin = True
        user.is_staff = True
        user.save()
        return user

class User(AbstractBaseUser):
    """
    Custom user class
    """
    username = models.CharField(max_length=64, unique=True, db_index=True)
    joined = models.DateTimeField(auto_now_add=True, auto_now=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_admin = models.BooleanField(default=False)

    objects = UserManager()

    USERNAME_FIELD = 'username'

    def __str__(self):
        return self.username

Backends.py

from django.contrib.auth.models import check_password
from accounts.models import User

class AuthenticationBackend(object):
    """
    Backend for authentication
    """
    def authenticate(self, username=None, password=None):
        try:
            user = User.objects.get(username=username)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
                return None

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

请帮助我迷路

1 个答案:

答案 0 :(得分:2)

AuthenticationBackend.get_user中,你有这个:

        if user.is_active:
            return User

实际上返回User 而不是user实例。稍后调用此方法的代码会尝试在您返回的内容上调用get_session_auth_hash(),从而导致错误。

你想:

        if user.is_active:
            return user