xbackend/api/api_v1/endpoints/user.py
2021-05-14 09:46:28 +08:00

82 lines
2.5 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.

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,
'nickname': user.nickname,
'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,
nickname=user.nickname,
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_account")
async def all_account(page: int = 1, limit: int = 10, db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.User = Depends(deps.get_current_user)
) -> Any:
"""
获取所有用户
"""
page -= 1
if page < 0:
page = 0
cursor = crud.user.find(db).skip(page * limit).limit(limit)
data = [schemas.UserDB(**user) async for user in cursor]
return schemas.Msg(code=0, msg='ok', data=data)