gpt4 book ai didi

django - 使用 simplejwt 模块在 django 中修改 jwt 访问 token 到期时间

转载 作者:行者123 更新时间:2023-12-05 00:11:22 30 4
gpt4 key购买 nike

from rest_framework_simplejwt.serializers import TokenObtainPairSerializer

from rest_framework_simplejwt.views import TokenObtainPairView

from rest_framework_simplejwt.utils import datetime_to_epoch

SUPERUSER_LIFETIME = datetime.timedelta(minutes=1)

class MyTokenObtainPairSerializer(TokenObtainPairSerializer):

@classmethod
def get_token(cls, user):
token = super(MyTokenObtainPairSerializer, cls).get_token(user)
token['name'] = user.username
token['user_id'] = user.id

if user.is_superuser:
#token.set_exp(from_time=starttime,lifetime=SUPERUSER_LIFETIME)
token.payload['exp'] = datetime_to_epoch(token.current_time + SUPERUSER_LIFETIME)

return token

class MyTokenObtainPairView(TokenObtainPairView):
serializer_class = MyTokenObtainPairSerializer

我试过这段代码(点击这个链接: How can we assign different expiry time to different users in jwt tokens in django)。此代码更新刷新 token 的到期时间,但我想使用 simplejwt 模块更新 django 中访问 token 的到期时间。请有任何建议。

最佳答案

我只是快速浏览了一下simplejwt github的页面,您可以自定义一些settings在您的 settings.py文件;

SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
}

根据评论更新答案

thanks for response . but i want set globally jwt expiry time and later based on role , i want to override that expiry time . how is it possible??



正如您所说,您必须覆盖默认的 token 生成器方法。但是怎么做?

首先,创建您自己的 token 获取 View ,该 View 继承自 TokenObtainPairView和您自己的 token 获取继承自 TokenObtainPairSerializer 的序列化程序.之后可以看到 validate方法创建 accessrefresh token ,因此如果您想基于用户角色等创建 token ,您也必须覆盖该方法。在这些步骤之后,您还必须更改您的 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')
]

关于django - 使用 simplejwt 模块在 django 中修改 jwt 访问 token 到期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53851567/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com