36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
from fastapi import APIRouter, Depends, HTTPException
|
|
from fastapi.security import OAuth2PasswordRequestForm
|
|
from sqlalchemy.orm import Session
|
|
from database import get_db
|
|
import models
|
|
from auth import verify_password, create_access_token, get_current_user
|
|
|
|
router = APIRouter(prefix="/api/auth", tags=["auth"])
|
|
|
|
@router.post("/login")
|
|
def login(form: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_db)):
|
|
user = db.query(models.User).filter(
|
|
models.User.username == form.username,
|
|
models.User.is_active == True
|
|
).first()
|
|
if not user or not verify_password(form.password, user.password_hash):
|
|
raise HTTPException(status_code=401, detail="아이디 또는 비밀번호가 올바르지 않습니다.")
|
|
token = create_access_token({"sub": str(user.id)})
|
|
return {
|
|
"access_token": token,
|
|
"token_type": "bearer",
|
|
"role": user.role,
|
|
"name": user.name,
|
|
"user_id": user.id
|
|
}
|
|
|
|
@router.get("/me")
|
|
def me(current_user: models.User = Depends(get_current_user)):
|
|
return {
|
|
"id": current_user.id,
|
|
"username": current_user.username,
|
|
"role": current_user.role,
|
|
"name": current_user.name,
|
|
"company": current_user.company,
|
|
}
|