FastAPI에서 로그인 및 회원가입 기능 구현하기

FastAPI는 Python 기반의 웹 프레임워크로, 사용자 인증과 회원가입 기능을 구현하는 것이 간단하고 효율적입니다. 이번 블로그 포스트에서는 FastAPI를 사용하여 로그인 및 회원가입 기능을 구현하는 방법에 대해 알아보겠습니다.

필수 라이브러리 설치

FastAPI를 사용하기 위해 다음과 같은 라이브러리를 설치해야 합니다.

터미널에서 다음 명령어를 실행하여 필요한 라이브러리를 설치합니다.

pip install fastapi uvicorn passlib

사용자 모델 생성

먼저, 사용자 정보를 저장하기 위한 사용자 모델을 생성해야 합니다. 사용자 모델은 사용자의 이메일, 패스워드 해시 등을 포함하고 있습니다.

from passlib.context import CryptContext

pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")

class User(BaseModel):
    email: str
    hashed_password: str

    def verify_password(self, password: str):
        return pwd_context.verify(password, self.hashed_password)

위의 코드에서 passlib 라이브러리를 사용하여 사용자의 패스워드를 해싱하고, bcrypt 알고리즘을 사용합니다. User 클래스는 Pydantic의 BaseModel을 상속받아 필드를 정의하고, verify_password() 메서드를 추가하여 입력받은 비밀번호와 저장된 해시된 비밀번호를 비교할 수 있도록 합니다.

로그인 및 회원가입 API 구현

이제 사용자 로그인과 회원가입을 위한 API를 구현할 차례입니다. FastAPI를 사용하면 간단하게 구현할 수 있습니다.

from fastapi import FastAPI, HTTPException
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
from jose import JWTError, jwt

app = FastAPI()
security = HTTPBearer()
SECRET_KEY = "your-secret-key" # 애플리케이션에서 사용할 시크릿 키입니다.

# 로그인 API
@app.post("/login")
def login(email: str, password: str):
    user = get_user_by_email(email)
    if user and user.verify_password(password):
        # JWT 생성
        token = create_access_token(user.email)
        return {"access_token": token}
    raise HTTPException(status_code=401, detail="Invalid email or password")

# 회원가입 API
@app.post("/register")
def register(email: str, password: str):
    user = User(email=email, hashed_password=hash_password(password))
    # 사용자 저장 로직 추가
    return {"message": "User registered successfully"}

# JWT 생성 함수
def create_access_token(email: str):
    payload = {"email": email}
    token = jwt.encode(payload, SECRET_KEY)
    return token

# 비밀번호 해싱 함수
def hash_password(password: str):
    return pwd_context.hash(password)

위의 코드에서 /login API는 사용자가 제공한 이메일과 비밀번호를 확인하여 올바른 경우에만 JWT 토큰을 생성하고 반환합니다. /register API는 새로운 사용자를 등록하고, 비밀번호를 해싱하여 저장합니다.

서버 실행

마지막으로, 서버를 실행하여 API를 테스트할 수 있습니다. 아래의 명령어를 사용하여 서버를 실행합니다.

uvicorn main:app --reload

이제 FastAPI에서 로그인 및 회원가입 기능을 구현하는 방법을 알게 되었습니다. 이제 이를 기반으로 사용자 관리 시스템을 구축할 수 있습니다. Happy coding!

#FastAPI #로그인 #회원가입