在 Django Rest Framework 中为新注册用户创建身份验证令牌时出错

问题描述 投票:0回答:1

我正在开发一个 Django 项目,我尝试使用 Django Rest Framework 为新注册的用户创建一个身份验证令牌。然而,当运行注册函数时,我遇到了以下错误:

ValueError: Cannot assign "<User: Test>": "Token.user" must be a "User" instance.

这里是发生错误的寄存器函数:

@api_view(['POST'])
def register(request):
    serializer = UserSerializer(data=request.data)

    if serializer.is_valid():
        serializer.save()

        user = User.objects.get(username=request.data['username'])
        user.hash_password(request.data['password'])
        user.save()

        token = Token.objects.create(user=user) # This is where the error occurs

        return Response({
            'token': token.key,
            'User': serializer.data
        }, status=status.HTTP_201_CREATED)
    
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

如何修复此错误并成功为新注册用户创建身份验证令牌?

我尝试使用 Django Rest Framework 视图中的注册功能来注册新用户。我期望用户成功注册(在数据库中注册)并生成与该用户关联的身份验证令牌。

python django django-rest-framework access-token
1个回答
0
投票

ValueError: Cannot assign "<User: Test>": "Token.user" must be a "User" instance.
错误通常意味着“user”对象不是 Token.user 字段期望的模型实例。

您的代码看起来是正确的,在

serializer.save()
之后,返回值是 User 模型的实例。但是,第
hash_password
行中的
user.hash_password(request.data['password'])
不是用户模型的标准 Django 方法。请确保此方法存在于您的 User 模型中并返回 User 实例,而不是字符串或其他内容。此外,此方法可能与
set_password
执行相同的工作,它已经是 Django 用户模型的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.