You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

29 lines
1.1 KiB

11 months ago
  1. from fastapi import APIRouter,Depends
  2. from fastapi.security import OAuth2PasswordRequestForm
  3. from datetime import timedelta
  4. from fastapi.security import OAuth2PasswordRequestForm
  5. from fastapi import Depends, FastAPI, HTTPException, status
  6. from dependencies import *
  7. from internal.models import Token
  8. from fastapi.middleware.cors import CORSMiddleware
  9. router=APIRouter(
  10. prefix="/users",
  11. tags=["用户管理"]
  12. )
  13. # 用户登录
  14. @router.post("/token", response_model=Token)
  15. async def login_for_access_token(
  16. form_data: OAuth2PasswordRequestForm = Depends(),
  17. ) -> Token:
  18. user = authenticate_user(form_data.username, form_data.password)
  19. if not user:
  20. raise HTTPException(
  21. status_code=status.HTTP_401_UNAUTHORIZED,
  22. detail="Incorrect username or password",
  23. headers={"WWW-Authenticate": "Bearer"},
  24. )
  25. access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
  26. access_token = create_access_token(
  27. data={"sub": user.username}, expires_delta=access_token_expires
  28. )
  29. return {"access_token": access_token, "token_type": "bearer"}