我已经配置了DRF使用JWT作为验证方案,并且大部分都能正常工作,但是当用户的令牌和刷新令牌不再有效时,而不是返回200作为未受保护路由的未授权用户,并显示网站,好像他们不再登录后端返回401。中间件设置,但我的假设是,如果默认值是AllowAny
,则会忽略一个错误的令牌。是否有我遗漏的配置?
来自DRF文件
如果未指定,此设置默认为允许无限制访问:
“默认许可类别”:[
'rest_framework.权限.允许任何人',]
我的settings.py
REST_FRAMEWORK = {
...
"DEFAULT_AUTHENTICATION_CLASSES": (
"rest_framework.authentication.BasicAuthentication",
"rest_framework_simplejwt.authentication.JWTAuthentication",
),
}
SIMPLE_JWT = {
"ACCESS_TOKEN_LIFETIME": datetime.timedelta(minutes=15),
"REFRESH_TOKEN_LIFETIME": datetime.timedelta(days=2),
...
}
ViewSet
示例返回带有错误访问令牌的401
class PromoApiSet(ViewSet):
serializer_class = PromoSerializer
def get_queryset(self, *args, **kwargs):
time_now = timezone.now()
return PromoNotification.objects.filter(
end_date__gte=time_now, start_date__lte=time_now
)
# @method_decorator(cache_page(120))
def list(self, request):
promos = self.get_queryset()
serializer = self.serializer_class(promos, many=True)
promos_data = serializer.data
response_data = {"promos": promos_data}
return Response(response_data)
1条答案
按热度按时间xxhby3vn1#
无效、格式错误或其他不正确的凭据将引发401,请参阅
JWTAuthentication
类的源代码。这对我来说是有意义的,但是如果您希望行为是“如果有错误,则静默地忽略此头”,那么您需要重写该方法,并且忽略错误:
这是可行的,但我不推荐它。如果你想更细粒度地“忽略”特定的错误,那么你需要覆盖更多的功能,或者提供类并直接进行修改。