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 core.security import get_password_hash from db import get_database from utils import ( verify_password_reset_token, ) router = APIRouter() @router.post("/login") async def login( # data: schemas.UserLogin, data: OAuth2PasswordRequestForm = Depends(), db: AsyncIOMotorDatabase = Depends(get_database) ) -> dict: """ 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") access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES) return { 'data': { 'name': user.name, 'email': user.email, # 'access_token': security.create_access_token( # expires_delta=access_token_expires, id=user.id, email=user.email, is_active=user.is_active, # 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