可以在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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录