FastAPI에서 소셜 로그인 기능 구현하기

FastAPI는 강력하고 빠른 웹 프레임워크로, 소셜 로그인 기능을 구현하기에도 매우 효과적입니다. 소셜 로그인은 사용자가 다른 웹 서비스의 계정을 사용하여 애플리케이션에 로그인할 수 있는 기능을 제공합니다. 이를 통해 사용자는 새로운 계정을 만들거나 기존의 계정으로 로그인하기 번거로움을 덜 수 있습니다.

소셜 로그인을 위한 패키지 설치

먼저, FastAPI에서 소셜 로그인을 구현하기 위해 다음과 같은 패키지를 설치해야 합니다.

pip install python-social-auth[all]

소셜 로그인 설정

FastAPI에서 소셜 로그인을 설정하려면 다음과 같은 단계를 따르면 됩니다.

  1. 애플리케이션을 등록하고 API 키 또는 클라이언트 ID를 발급받습니다. 이는 소셜 로그인 제공 업체의 개발자 페이지에서 수행할 수 있습니다.
  2. FastAPI의 설정 파일(config 파일)에 소셜 로그인 제공 업체의 정보와 API 키 또는 클라이언트 ID 등을 저장합니다.

로그인 라우터 구현

로그인 페이지와 콜백 URL을 처리할 FastAPI의 라우터를 구현해야 합니다. 이 라우터는 소셜 로그인 제공 업체의 인증을 처리하고 로그인 정보를 받아올 수 있어야 합니다.

from fastapi import FastAPI
from typing import Dict
app = FastAPI()

@app.get("/")
def index():
    return {"Hello": "World"}

@app.get("/authenticate/{provider}")
def authenticate(provider: str):
    # TODO: 해당 소셜 로그인 제공 업체로 리다이렉트
    pass

@app.get("/callback/{provider}")
def callback(provider: str, params: Dict[str, str]):
    # TODO: 콜백 URL에서 사용자 정보를 처리
    pass

소셜 로그인 처리

콜백 URL에서 사용자 정보를 처리하기 위해 python-social-auth 패키지를 사용할 수 있습니다. 설정한 소셜 로그인 제공 업체의 정보를 사용하여 사용자 정보를 받아와서 FastAPI에서 활용할 수 있습니다.

from fastapi import FastAPI
from typing import Dict
from fastapi.responses import RedirectResponse
from social_core.backends.oauth import BaseOAuth2
from social_core.utils import url_add_parameters

app = FastAPI()

SOCIAL_AUTH_REDIRECT_IS_HTTPS = False

@app.get("/")
def index():
    return {"Hello": "World"}

@app.get("/authenticate/{provider}")
def authenticate(provider: str):
    backend: BaseOAuth2 = getattr(social, provider, None)
    if backend:
        redirect_uri = app.url_path_for("callback", provider=backend.name)
        return RedirectResponse(backend.auth_url(), status_code=302, headers={"Location": redirect_uri})
    return {"error": f"Unknown provider: {provider}"}

@app.get("/callback/{provider}")
def callback(provider: str, params: Dict[str, str]):
    backend: BaseOAuth2 = getattr(social, provider, None)
    if backend:
        redirect_uri = app.url_path_for("callback", provider=backend.name)
        access_token = backend.get_access_token()
        user = backend.do_auth(access_token)
        # TODO: 소셜 로그인 정보를 FastAPI에서 활용
        return user.to_dict()
    return {"error": f"Unknown provider: {provider}"}

위의 코드는 간단한 예제이며, 실제로는 세부 구현이 필요합니다. 사용자 정보를 받아와 데이터베이스에 저장하거나 쿠키에 저장하는 등 추가적인 작업이 필요할 수 있습니다. 따라서 자신의 애플리케이션에 맞게 코드를 수정해야 합니다.

결론

FastAPI를 통해 소셜 로그인 기능을 구현하는 방법을 알아보았습니다. 소셜 로그인은 사용자 경험을 향상시키고 새로운 계정 관리의 번거로움을 줄일 수 있는 강력한 기능입니다. FastAPI를 사용하여 간편하게 소셜 로그인을 구현해보세요!

#FastAPI #소셜로그인