1

我正在使用 Djoser Python 包为我的应用程序创建身份验证。

如文档中所述,我已更新settings.py如下所示 -

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

我也添加permission_classAPIView

permission_classes = [IsAuthenticated]

我能够使用凭据获取refreshand令牌 -access

{
    "refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTU4NjI1MDYyOCwianRpIjoiZmU5MjA0NzE2NWIwNGNjYmE5YzgzMWYwMDY5Njk4NzQiLCJ1c2VyX2lkIjoxfQ.I-IPEVrMchQWfGKv80x8pcIMHkEoMlUci7eRZGKjzOA",
    "access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNTg2MTY0NTI4LCJqdGkiOiI4NGVlMmQ1OWUzYTI0MWU5OGJhNmQyMDBlNTc5NjQ5YSIsInVzZXJfaWQiOjF9.4InHnERd9u7nt8-iaNjt08Fd9169-VVAIYgBGa08euE"
}

但是当我尝试使用access邮递员的相同令牌发送 POST 请求时,我收到了这个错误 -

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

这是邮递员请求的屏幕截图 -

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

2

我相信这里的问题在于提供给 Django Rest Framework 的身份验证标头。

您提供的身份验证标头为:

'Authorization': 'Bearer XXXXXXXX'

当 DRF 令牌认证需要:

'Authorization': 'Token XXXXXXXX'

https://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication

使用上面建议的 Header 或子类化 TokenAuthentication 以支持 Bearer 关键字:

https://github.com/encode/django-rest-framework/commit/ffdac0d93619b7ec6039b94ce0e563f0330faeb1

于 2020-04-09T17:55:28.207 回答