首页 > 解决方案 > 登录后 Django Rest Framework 要求身份验证

问题描述

我能够通过令牌身份验证成功登录。但是,当获取另一个 API 时,它会要求身份验证。

{"detail":"Authentication credentials were not provided."}

视图.py

class CreateQuiz(generics.ListCreateAPIView):    
    serializer_class = QuizSerializer
    authentication_classes = (TokenAuthentication,)
    permission_classes =(IsAuthenticated,)
        
    def get_queryset(self):    
        return somequeryset

设置.py

REST_FRAMEWORK ={
     'DEFAULT_AUTHENTICATION_CLASSES': (
    'knox.auth.TokenAuthentication',
    ),

}



from datetime import timedelta

REST_KNOX ={
    'USER_SERIALZIER' :'api.serializer.UserSerializer',
    'TOKEN_TTL': timedelta(hours=24*7),
}

当我在邮递员上测试http://127.0.0.0.1:8000/apis/v1/login/?username=xxxx.com&password=xxxx时,我成功通过身份验证并返回

{
    "expiry": "2021-05-18T19:46:33.841420Z",
    "token": "f07a35897b070eabfcf1439c4495b8cede5fd9908135692e2c516127a926f2ab"
}

标签: djangodjango-rest-frameworkdjango-authenticationdjango-serializer

解决方案


您必须在所有未来请求的标头中添加令牌。

Authorization: Token <your token>

此外,您应该使用 POST 而不是 GET,因为密码将在 URL 中可见。


推荐阅读