DRF基于SimpleJWT实现JWT登出时报未提供认证凭证问题
Django REST Framework JWT登出接口认证报错
通过Postman访问登出接口时,返回报错:"detail": "Authentication credentials were not provided."
现存疑问
- 是否需要开发包含refresh token字段的序列化器,并将其应用到登出视图的参数校验流程中?
- Postman端的请求头配置、传参方式是否符合接口要求?
关联项目配置
登出视图代码(views.py)
from rest_framework.permissions import IsAuthenticated from rest_framework_simplejwt.tokens import RefreshToken class LogoutView(APIView): permission_classes = (IsAuthenticated,) def post(self, request): try: refresh_token = request.data["refresh_token"] token = RefreshToken(refresh_token) token.blacklist() return Response(status=status.HTTP_205_RESET_CONTENT) except Exception as e: return Response(status=status.HTTP_400_BAD_REQUEST)
路由配置(urls.py)
from accounts.views.user_api_views import ( LogoutView, LogoutAllView, ) urlpatterns = [ path("auth/", include("djoser.urls")), path("auth/", include("djoser.urls.jwt")), path("auth/token/", ObtainCustomizedTokenView.as_view(), name="token_obtain_pair"), path( "auth/token/refresh/", jwt_views.TokenRefreshView.as_view(), name="token_refresh", ), path("logout/", LogoutView.as_view(), name="logout"), path("logout_all/", LogoutAllView.as_view(), name="logout_all"), ]
全局配置(settings.py)
- 已注册应用列表:
INSTALLED_APPS = [ ... # 本地应用 # 第三方应用 "storages", "rest_framework", "rest_framework_gis", "rest_framework.authtoken", "djoser", "django_celery_beat", "raven.contrib.django.raven_compat", "rest_framework_simplejwt.token_blacklist", ]
- JWT认证参数配置:
SIMPLE_JWT = { "ACCESS_TOKEN_LIFETIME": timedelta(weeks=521), # 有效期10年 "REFRESH_TOKEN_LIFETIME": timedelta(weeks=521), "ROTATE_REFRESH_TOKENS": True, "BLACKLIST_AFTER_ROTATION": True, "ALGORITHM": "HS256", "SIGNING_KEY": SECRET_KEY, "VERIFYING_KEY": None, "AUTH_HEADER_TYPES": ("JWT",), "USER_ID_FIELD": "id", "USER_ID_CLAIM": "user_id", "AUTH_TOKEN_CLASSES": ("rest_framework_simplejwt.tokens.AccessToken",), "TOKEN_TYPE_CLAIM": "token_type", }
- DRF全局参数配置:
REST_FRAMEWORK = { "DEFAULT_AUTHENTICATION_CLASSES": ( "rest_framework_simplejwt.authentication.JWTAuthentication", ), "DEFAULT_PARSER_CLASSES": [ "rest_framework.parsers.JSONParser", "rest_framework.parsers.FormParser", "rest_framework.parsers.MultiPartParser", ], "DEFAULT_PERMISSIONS_CLASSES": ("rest_framework.permissions.IsAuthenticated",), }
Postman请求配置

内容的提问来源于stack exchange,提问作者theSekyi
相关产品推荐
相关产品推荐

