from datetime import timedelta from typing import Any from fastapi import APIRouter, Body, Depends, HTTPException, Request from fastapi.security import OAuth2PasswordRequestForm from motor.motor_asyncio import AsyncIOMotorClient, AsyncIOMotorDatabase import crud, schemas from api import deps from core import security from core.config import settings from db import get_database router = APIRouter() @router.post("/login") async def login( # data: schemas.UserLogin, data: OAuth2PasswordRequestForm = Depends(), db: AsyncIOMotorDatabase = Depends(get_database) ) -> Any: """ OAuth2兼容令牌登录,获取将来令牌的访问令牌 """ user = await crud.user.authenticate(db, name=data.username, password=data.password ) if not user: # raise HTTPException(status_code=400, detail="Incorrect name or password") return schemas.Msg(code=-1, msg='密码或用户名错误') access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES) return { 'data': { 'name': user.name, 'email': user.email, 'token': security.create_access_token( expires_delta=access_token_expires, _id=str(user.id), email=user.email, is_superuser=user.is_superuser, name=user.name ), "token_type": "bearer", }, 'access_token': security.create_access_token( expires_delta=access_token_expires, _id=str(user.id), email=user.email, is_superuser=user.is_superuser, name=user.name ), "token_type": "bearer", 'code': 0, 'msg': 'success', } @router.get("/me", response_model=schemas.User) def me(current_user: schemas.User = Depends(deps.get_current_user)) -> Any: """ Test access token """ return current_user @router.get("/all_user") async def all_user(db: AsyncIOMotorDatabase = Depends(get_database)) -> Any: """ 获取所有用户 """ users = await crud.user.find_many(db) data = [{ "_id": "0", "name": "所有用户" }] data += [schemas.UserDB(**user) for user in users] return schemas.Msg(code=0, msg='ok', data=data)