本文默认认为你已经看完了上面所有的文章
settings.py
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5), # token有效期5分钟
'REFRESH_TOKEN_LIFETIME': timedelta(days=1) # 刷新后token有效期延长1天
}
# 是的 这里对比起使用默认的simplejwt,可以不用在drf渲染器中增加'DEFAULT_AUTHENTICATION_CLASSES': (
# ...
# 'rest_framework_simplejwt.authentication.JWTAuthentication',
# ),因为我在上面的文章中自定义了一个AUTHENTICATION
serializers.py
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework.exceptions import AuthenticationFailed
# 重写simplejwt中的获取token
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
def validate(self, attrs):
"""
登录返回token和refresh
:param attrs:
:return:
"""
try:
data = super().validate(attrs)
response = {
'success': True,
'token': data['access'],
'refresh': data['refresh'],
'username': self.user.username # 具体返回什么自己决定
}
return response
except AuthenticationFailed as atf:
print(atf) # 可以看具体是什么错误
return {
'success': 'false',
'errorMsg': 'username or password is error'
}
view.py
from User.serializers import MyTokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView
class MyTokenObtainPairView(TokenObtainPairView):
serializer_class = MyTokenObtainPairSerializer
urls.py