mirror of
https://github.com/opsre/LiteOps.git
synced 2026-05-21 11:27:26 +08:00
first commit
This commit is contained in:
56
backend/apps/utils/auth.py
Normal file
56
backend/apps/utils/auth.py
Normal file
@@ -0,0 +1,56 @@
|
||||
import jwt
|
||||
import logging
|
||||
from functools import wraps
|
||||
from django.http import JsonResponse
|
||||
from django.conf import settings
|
||||
from ..models import UserToken
|
||||
|
||||
logger = logging.getLogger('apps')
|
||||
|
||||
def jwt_auth_required(view_func):
|
||||
@wraps(view_func)
|
||||
def wrapper(request, *args, **kwargs):
|
||||
token = request.headers.get('Authorization')
|
||||
if not token:
|
||||
logger.info('认证失败: 未提供Token')
|
||||
return JsonResponse({
|
||||
'code': 401,
|
||||
'message': '未提供Token'
|
||||
}, status=401)
|
||||
|
||||
try:
|
||||
# 验证token是否存在于数据库
|
||||
user_token = UserToken.objects.filter(token=token).first()
|
||||
if not user_token:
|
||||
logger.info('认证失败: Token无效')
|
||||
return JsonResponse({
|
||||
'code': 401,
|
||||
'message': 'Token无效'
|
||||
}, status=401)
|
||||
|
||||
# 解析token
|
||||
payload = jwt.decode(token, settings.SECRET_KEY, algorithms=['HS256'])
|
||||
request.user_id = payload.get('user_id')
|
||||
|
||||
return view_func(request, *args, **kwargs)
|
||||
|
||||
except jwt.ExpiredSignatureError:
|
||||
logger.info('认证失败: Token已过期')
|
||||
return JsonResponse({
|
||||
'code': 401,
|
||||
'message': 'Token已过期'
|
||||
}, status=401)
|
||||
except jwt.InvalidTokenError:
|
||||
logger.info('认证失败: Token格式无效')
|
||||
return JsonResponse({
|
||||
'code': 401,
|
||||
'message': '无效的Token'
|
||||
}, status=401)
|
||||
except Exception as e:
|
||||
logger.error('认证过程发生错误', exc_info=True)
|
||||
return JsonResponse({
|
||||
'code': 500,
|
||||
'message': '服务器错误'
|
||||
}, status=500)
|
||||
|
||||
return wrapper
|
||||
Reference in New Issue
Block a user