Django Rest Framework JWT:如何在登录时更改令牌过期时间

django

1个回答

写回答

1844616295

2025-06-13 12:55

+ 关注

Django
Django

在使用 Django Rest Framework JWT 进行用户认证时,有时我们需要自定义令牌的过期时间。令牌过期时间是指令牌在多长时间后失效,需要用户重新登录获取新的令牌。默认情况下,DRF JWT 的令牌过期时间是 5 分钟,但是我们可以根据需求来更改它。

更改令牌过期时间的方法:

1. 在 Django 项目的设置文件(settings.py)中,找到 DRF JWT 的配置项。通常,这些配置项以 "JWT_" 开头。

Python

JWT_AUTH = {

'JWT_EXPIRATION_DELTA': datetime.timedelta(minutes=5),

# 其他配置项...

}

在上述代码中,JWT_EXPIRATION_DELTA 设置了令牌的过期时间为 5 分钟。我们可以根据需求修改这个值,比如将其设置为 15 分钟。

Python

JWT_AUTH = {

'JWT_EXPIRATION_DELTA': datetime.timedelta(minutes=15),

# 其他配置项...

}

2. 在修改完设置文件后,需要重新生成令牌才能使修改生效。可以在用户登录成功后,调用 DRF JWT 提供的 jwt_encode_handler 方法重新生成令牌。

Python

from rest_framework_jwt.utils import jwt_encode_handler

def login(request):

# 登录逻辑...

# 重新生成令牌

token = jwt_encode_handler(user)

return Response({'token': token})

在上述代码中,我们调用了 jwt_encode_handler 方法传入用户对象 user,生成新的令牌并返回给客户端

案例代码:

下面是一个完整的示例代码,演示了如何使用 DRF JWT 进行用户认证,并自定义令牌的过期时间。

Python

# settings.py

JWT_AUTH = {

'JWT_EXPIRATION_DELTA': datetime.timedelta(minutes=15),

# 其他配置项...

}

Python

# views.py

from rest_framework_jwt.utils import jwt_encode_handler

from rest_framework.views import APIView

class LoginView(APIView):

def post(self, request):

# 登录逻辑...

# 重新生成令牌

token = jwt_encode_handler(user)

return Response({'token': token})

在上述代码中,我们在 settings.py 文件中将令牌过期时间设置为 15 分钟,并在 LoginView 中重新生成令牌。

自定义令牌过期时间的好处:

自定义令牌过期时间可以根据实际需求来灵活设置。对于一些敏感操作或者需要保持长时间登录状态的场景,我们可以将令牌过期时间设置得更长,提高用户体验。而对于一些安全性要求较高的操作,我们可以将令牌过期时间设置得更短,增加安全性。

通过以上方法,我们可以很方便地自定义 DRF JWT 的令牌过期时间。通过修改设置文件和重新生成令牌,我们能够根据实际需求来灵活设置令牌的过期时间,以提高用户体验和系统安全性。

希望本文对你理解 Django Rest Framework JWT 的令牌过期时间的设置有所帮助。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号