diagnose-backend/authentication/authentication.py
pzc-x99 f56b66d8f1 /health/
/error_code_map/
/ec_user/*
/diagnose/*
/admin/*
2025-02-28 23:05:31 +08:00

32 lines
1.2 KiB
Python

from rest_framework.authentication import TokenAuthentication
from rest_framework.exceptions import AuthenticationFailed
from .models import CustomToken
from datetime import timedelta
from django.utils import timezone
from functools import wraps
class CustomTokenAuthentication(TokenAuthentication):
def authenticate(self, request):
# 获取请求中的 token
token_key = request.headers.get('token')
if token_key:
# 移除前缀 (如果有 "Token " 前缀的话)
if token_key.startswith('Token '):
token_key = token_key[6:]
# print(token_key)
try:
# 获取自定义的 Token 对象
token = CustomToken.objects.get(key=token_key)
# 检查 token 是否过期
if token.expiration_date < timezone.now():
raise AuthenticationFailed('Token has expired.')
return (token.user, token) # 返回用户和 token
except CustomToken.DoesNotExist:
raise AuthenticationFailed('Invalid token.')
raise AuthenticationFailed('Authorization header missing or invalid.')