“AccessToken.user”必须是“User”实例

Ser*_*ity 5 python django oauth python-3.x django-rest-framework

自 3 天以来,我一直试图找出基于 oAuth2 令牌的身份验证,但仍无济于事。我已经编写了一个用于用户身份验证的代码。但是,我收到一个错误

/api/customer/login/ 处的 ValueError 无法分配“{'username': 'sanskars'}”:“AccessToken.user”必须是“User”实例。

这可能是什么灵魂?为什么会出现以下错误?

视图.py

class UserLoginAPI(APIView):
    permission_classes = [AllowAny]
    serializer_class = UserLoginSerializer

    def post(self, request, *args, **kwargs):
        access_token = request.GET.get('access_token')
        data = request.data
        serializer = UserLoginSerializer(data=data)
        if serializer.is_valid(raise_exception=True):
            new_data = serializer.data
            if new_data:
                app = Application.objects.get(name="appname")
                try:
                    print('trying to fetch old token if exists')
                    old_token = AccessToken.objects.get(user=new_data, appliction=app)
                    print('old_token',old_token)
                except:
                    pass
                else:
                    old_token.delete()
                new_token = generate_token()
                print('new_token',new_token)
                AccessToken.objects.create(user=new_data, application=app, expires=datetime.now() + timedelta(days=365),token=new_token)
                print('aceess',AccessToken)
            return Response(new_data, status=status.HTTP_200_OK)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
Run Code Online (Sandbox Code Playgroud)

序列化程序.py

class UserLoginSerializer(ModelSerializer):
    username = CharField()
    # email = EmailField(label='Email Address')
    class Meta:
        model = User
        fields = [
            'username',
            'password',

        ]
        extra_kwargs = {"password":{"write_only": True} }
Run Code Online (Sandbox Code Playgroud)

还有一个困惑是我需要在注册用户时生成令牌吗?