Trung BìnhPython iconPython

JWT Authentication — implement đầy đủ trong FastAPI?

JWT auth gồm bốn bước:

  1. Hash password với bcrypt
  2. Tạo JWT token khi login
  3. Verify token trong dependency
  4. Protect routes với Depends(get_current_user)

Dùng PyJWT (không phải python-jose — đã có CVEs và ít được maintain).

python
from passlib.context import CryptContext
import jwt  # pip install PyJWT
from datetime import datetime, timedelta, timezone

pwd = CryptContext(schemes=["bcrypt"])
SECRET = "your-secret-key"
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 30

def create_token(user_id: int) -> str:
    expire = datetime.now(timezone.utc) + timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
    return jwt.encode({"sub": str(user_id), "exp": expire}, SECRET, ALGORITHM)

async def get_current_user(token = Depends(oauth2_scheme)):
    try:
        payload = jwt.decode(token, SECRET, algorithms=[ALGORITHM])
        uid = payload.get("sub")
        if not uid: raise credentials_exception
    except jwt.PyJWTError:
        raise HTTPException(401, "Invalid token")
    return await get_user(int(uid))

Xem toàn bộ Python cùng filter theo level & chủ đề con.

Mở danh sách Python