Files
boss_dp/server/api/auth.py
Your Name 0ac1e9549c 哈哈
2026-02-14 16:49:44 +08:00

51 lines
1.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
"""
认证 API登录无需 token
"""
import uuid
from rest_framework import status
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
from rest_framework.response import Response
from server import config
from server.models import AuthToken
from server.serializers import LoginSerializer
@api_view(["POST"])
@permission_classes([AllowAny])
def login(request):
"""
登录接口(支持 JSON 和 form-data
- 校验用户名/密码
- 生成 token写入数据库
- 通过 Set-Cookie 返回 auth_token前端后续请求自动携带
- 下一次登录会生成新 token旧 token 自动失效
"""
ser = LoginSerializer(data=request.data)
ser.is_valid(raise_exception=True)
username = ser.validated_data["username"]
password = ser.validated_data["password"]
if username != config.ADMIN_USERNAME or password != config.ADMIN_PASSWORD:
return Response({"detail": "用户名或密码错误"}, status=status.HTTP_401_UNAUTHORIZED)
token = uuid.uuid4().hex
AuthToken.objects.update_or_create(
username=username,
defaults={"token": token},
)
resp = Response({"token": token})
resp.set_cookie(
key="auth_token",
value=token,
httponly=True,
max_age=365 * 24 * 60 * 60,
samesite="Lax",
)
return resp