Я только что быстро просмотрел страницу simplejwt github, и вы можете настроить некоторые настройки в своем файле settings.py
;
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
}
Обновленный ответ на основе комментария
спасибо за ответ.но я хочу установить глобальное время истечения JWT и позже на основе роли, я хочу переопределить это время истечения.Как это возможно ??
Как вы говорите, вы должны переопределить метод генерации токенов по умолчанию.Но как?
Сначала создайте собственное представление получения токена, унаследованное от TokenObtainPairView
, и собственный сериализатор получения токена, унаследованный от TokenObtainPairSerializer
.После этого вы увидите, что метод validate
создает токены access
и refresh
, поэтому вы также должны переопределить этот метод, если хотите создать токен на основе роли пользователя и т. Д. После этих шагов вам также придется изменить свой urls.py
.
Пример;
import datetime
from django.utils.six import text_type
from rest_framework_simplejwt.views import TokenObtainPairView
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
SUPERUSER_LIFETIME = datetime.timedelta(minutes=1)
class MyTokenObtainSerializer(TokenObtainPairSerializer):
def validate(self, attrs):
data = super(TokenObtainPairSerializer, self).validate(attrs)
refresh = self.get_token(self.user)
data['refresh'] = text_type(refresh)
if self.user.is_superuser:
new_token = refresh.access_token
new_token.set_exp(lifetime=SUPERUSER_LIFETIME)
data['access'] = text_type(new_token)
else:
data['access'] = text_type(refresh.access_token)
return data
class MyTokenObtainView(TokenObtainPairView):
serializer_class = MyTokenObtainSerializer
urls.py
urlpatterns = [
path('api/token/', MyTokenObtainView.as_view(), name='token_obtain_pair')
]