카카오 로그인 redirect 처리 .

insta
hbyang 2026-01-21 14:59:55 +09:00
parent 36de908431
commit 72e06ee951
1 changed files with 13 additions and 6 deletions

View File

@ -7,7 +7,7 @@
from typing import Optional from typing import Optional
from fastapi import APIRouter, Depends, Header, Request, status from fastapi import APIRouter, Depends, Header, Request, status
from fastapi.responses import Response from fastapi.responses import RedirectResponse, Response
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.database.session import get_session from app.database.session import get_session
@ -45,21 +45,20 @@ async def kakao_login() -> KakaoLoginResponse:
@router.get( @router.get(
"/kakao/callback", "/kakao/callback",
response_model=LoginResponse,
summary="카카오 로그인 콜백", summary="카카오 로그인 콜백",
description="카카오 인가 코드를 받아 로그인/가입을 처리하고 JWT 토큰을 발급합니다.", description="카카오 인가 코드를 받아 로그인/가입을 처리하고 프론트엔드로 리다이렉트합니다.",
) )
async def kakao_callback( async def kakao_callback(
request: Request, request: Request,
code: str, code: str,
session: AsyncSession = Depends(get_session), session: AsyncSession = Depends(get_session),
user_agent: Optional[str] = Header(None, alias="User-Agent"), user_agent: Optional[str] = Header(None, alias="User-Agent"),
) -> LoginResponse: ) -> RedirectResponse:
""" """
카카오 로그인 콜백 카카오 로그인 콜백
카카오 로그인 성공 발급받은 인가 코드로 카카오 로그인 성공 발급받은 인가 코드로
JWT 토큰을 발급합니다. JWT 토큰을 발급하고 프론트엔드로 리다이렉트합니다.
신규 사용자인 경우 자동으로 회원가입이 처리됩니다. 신규 사용자인 경우 자동으로 회원가입이 처리됩니다.
""" """
@ -71,13 +70,21 @@ async def kakao_callback(
if forwarded_for: if forwarded_for:
ip_address = forwarded_for.split(",")[0].strip() ip_address = forwarded_for.split(",")[0].strip()
return await auth_service.kakao_login( result = await auth_service.kakao_login(
code=code, code=code,
session=session, session=session,
user_agent=user_agent, user_agent=user_agent,
ip_address=ip_address, ip_address=ip_address,
) )
# 프론트엔드로 토큰과 함께 리다이렉트
redirect_url = (
f"http://localhost:3000"
f"?access_token={result.access_token}"
f"&refresh_token={result.refresh_token}"
)
return RedirectResponse(url=redirect_url, status_code=302)
@router.post( @router.post(
"/kakao/verify", "/kakao/verify",