django 函数视图 实现jwt接口验证 token过期时间为4小时4小时未操作则token过期4小时内操作则无token过期配置jwt 每个接口验证方法? 通用方法
可以在django中使用装饰器来实现jwt接口验证,以下是一个通用的装饰器方法:
from datetime import datetime, timedelta
import jwt
def jwt_auth(view_func):
def wrapper(request, *args, **kwargs):
try:
token = request.META.get('HTTP_AUTHORIZATION', '').split()[1]
payload = jwt.decode(token, 'SECRET_KEY', algorithms=['HS256'])
exp_time = datetime.fromtimestamp(payload['exp'])
if exp_time < datetime.now():
return JsonResponse({'message': 'Token expired'}, status=401)
else:
request.user = payload['user_id']
except IndexError:
return JsonResponse({'message': 'Token not found'}, status=401)
except jwt.exceptions.DecodeError:
return JsonResponse({'message': 'Token is invalid'}, status=401)
return view_func(request, *args, **kwargs)
return wrapper
在使用时,只需要在需要验证token的函数或类视图上添加这个装饰器即可:
@jwt_auth
def my_view(request):
# your code here
这个装饰器会检查请求头中是否含有名为Authorization的字段,并且解码token验证是否过期。如果token过期,返回401状态码和一个提示信息;否则将用户ID赋值给request.user属性,然后执行视图函数
原文地址: https://www.cveoy.top/t/topic/hq1i 著作权归作者所有。请勿转载和采集!