Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django DRF-JWT如何修复过期后仍处于活动状态的令牌?_Django_Django Rest Framework_Jwt_Django Rest Framework Simplejwt - Fatal编程技术网

Django DRF-JWT如何修复过期后仍处于活动状态的令牌?

Django DRF-JWT如何修复过期后仍处于活动状态的令牌?,django,django-rest-framework,jwt,django-rest-framework-simplejwt,Django,Django Rest Framework,Jwt,Django Rest Framework Simplejwt,我将Djangorestframework与Djangorestframework simplejwt库一起使用,令牌系统正在工作,但在访问和刷新令牌都过期后(我可以与postman确认),frontent应用程序(Vue和axios)仍然能够获取更新的数据,这是怎么可能的?当我检查axios请求时,令牌与我在postman中使用的令牌相同,在postman中,它会给我“令牌无效或过期”,但在axios中,它会接收所有数据并确认 以下是配置: settings.py REST_FRAMEWOR

我将Djangorestframework与Djangorestframework simplejwt库一起使用,令牌系统正在工作,但在访问和刷新令牌都过期后(我可以与postman确认),frontent应用程序(Vue和axios)仍然能够获取更新的数据,这是怎么可能的?当我检查axios请求时,令牌与我在postman中使用的令牌相同,在postman中,它会给我“令牌无效或过期”,但在axios中,它会接收所有数据并确认

以下是配置:

settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    )
}

SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60),
    'REFRESH_TOKEN_LIFETIME': timedelta(hours=24),
    'ROTATE_REFRESH_TOKENS': True,
    'BLACKLIST_AFTER_ROTATION': True,
    'AUTH_HEADER_TYPES': ('JWT',),
    'USER_ID_FIELD': 'id',
    'USER_ID_CLAIM': 'user_id',
}

您确定终结点需要身份验证吗?如果您使用的是chrome,请使用ctrl+
shift
+
i
打开一个新的incognito,然后导航到该端点。它在没有身份验证的情况下还能工作吗?如果是,则该端点可能具有只读访问权限。您的settings.py文件中的
DEFAULT\u PERMISSION\u CLASSES
是否设置为
IsAuthenticatedOrReadOnly
?谢谢,我错过了settings.py中的DEFAULT\u PERMISSION\u CLASSES。您确定端点需要身份验证吗?如果您使用的是chrome,请使用ctrl+
shift
+
i
打开一个新的incognito,然后导航到该端点。它在没有身份验证的情况下还能工作吗?如果是,则该端点可能具有只读访问权限。您的settings.py文件中的
DEFAULT\u PERMISSION\u CLASSES
是否设置为
IsAuthenticatedOrReadOnly
?谢谢,我错过了settings.py中的默认\u PERMISSION\u CLASSES
urls.py

from rest_framework_simplejwt.views import TokenRefreshView
from dgmon.views import MyTokenObtainPairView
app_name = 'dgmon'

admin.site.site_header = settings.ADMIN_SITE_HEADER
admin.site.site_title = settings.ADMIN_SITE_TITLE

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'^', include('dgmon.urls')),
    path('api/token/', MyTokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/refresh/', TokenRefreshView.as_view(), name='token_refresh'),

]
views.py

from rest_framework_simplejwt.views import TokenObtainPairView
from dgmon.serializers import MyTokenObtainPairSerializer


class MyTokenObtainPairView(TokenObtainPairView):
    serializer_class = MyTokenObtainPairSerializer

serializers.py

from rest_framework_simplejwt.serializers import TokenObtainPairSerializer


class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
    def validate(self, attrs):
        data = super().validate(attrs)
        refresh = self.get_token(self.user)
        data['refresh'] = str(refresh)
        data['access'] = str(refresh.access_token)

        data['user'] = self.user.username
        data['groups'] = self.user.groups.values_list('name', flat=True)
        return data