Files
xbxs/routers/auth.py

62 lines
1.5 KiB
Python

from datetime import datetime
from pathlib import Path
from fastapi import APIRouter, Request, Response
from fastapi.responses import JSONResponse, RedirectResponse
from models import User
from services.services import XBXS
from starlette.templating import Jinja2Templates
from config import BASE_DIR
router = APIRouter()
templates = Jinja2Templates(directory=str(BASE_DIR / "templates"))
@router.get("/")
async def index(request: Request):
token = request.cookies.get("xbxs_token")
if token:
return RedirectResponse("/home")
return templates.TemplateResponse(
"login.html",
{
"request": request,
"year": datetime.now().year,
},
)
@router.get("/logout")
async def logout(request: Request):
token = request.cookies.get("xbxs_token")
if token:
request.cookies.clear()
return templates.TemplateResponse(
"login.html",
{
"request": request,
"year": datetime.now().year,
},
)
@router.post("/login")
async def login(user: User, response: Response):
xbxs = XBXS()
result = await xbxs.login(username=user.username, password=user.password)
token = result.get("token")
if not token:
return JSONResponse({"msg": "登录失败"}, status_code=401)
resp = JSONResponse({"msg": "ok"})
resp.set_cookie(
key="xbxs_token",
value=token,
max_age=60 * 60 * 24 * 7, # 7 天
httponly=False,
samesite="lax",
)
return resp