You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Rest Framework自定义用户及自定义认证Token实现问题求助

问题1:用户创建时密码未正确存储

你的序列化器create方法里,从validated_data中提取了password字段但没有用到,创建用户时直接写死password=None,所有新建用户的密码都为空,自然无法通过认证。另外Django的AbstractUser不能直接用objects.create存储密码,该方法会直接存储明文,必须调用create_user方法自动对密码做哈希处理,否则存储的密码也无法通过校验。

修改后的序列化器create方法参考:

def create(self, validated_data):
    User = get_user_model()
    # 无需逐个提取字段,直接解包validated_data即可
    return User.objects.create_user(**validated_data)

如果需要保留单独赋值的写法,要手动调用set_password处理密码:

def create(self, validated_data):
    User = get_user_model()
    employee = validated_data.pop('Employee')
    password = validated_data.pop('password')
    user = User.objects.create(
        Employee=employee,
        **validated_data
    )
    user.set_password(password)
    user.save()
    return user

问题2:视图代码存在模型名拼写错误

GET接口中写的是users = Users.objects.all(),你的自定义用户模型类名是User,多了一个s,会直接触发运行时错误,影响接口正常返回。


问题3:缺少必要的配置校验

先确认settings.py里已经完成以下配置:

  1. 声明自定义用户模型
AUTH_USER_MODEL = "你的应用名称.User"
  1. 配置DRF Token认证相关依赖
INSTALLED_APPS = [
    # 其他应用
    'rest_framework',
    'rest_framework.authtoken',
]

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ]
}

问题4:认证接口400的定位方法

你当前的日志没有输出具体错误信息,可以修改自定义认证类打印错误详情,快速定位问题:

class CustomAuthToken(ObtainAuthToken):
    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data, context={'request': request})
        if not serializer.is_valid():
            print(serializer.errors) # 控制台会输出具体错误,比如用户名或密码不正确
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        user = serializer.validated_data['user']
        token, created = Token.objects.get_or_create(user=user)
        return Response({
            'token': token.key,
            'user_id': user.pk,
            'first_name': user.first_name,
            'email': user.email
        })

你当前场景下90%的概率400错误是因为用户密码为空,校验失败返回的错误。

内容的提问来源于stack exchange,提问作者Siva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 06:48:03