Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 7 additions & 9 deletions src/pages/home/KakaoCallbackPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { useEffect, useRef } from 'react';
import { useNavigate } from 'react-router-dom';
import { loginWithKakaoAccessToken } from '@/api/user/auth.api';
import { likePlace } from '@/api/like/like.api';
import { Loader } from '@/component';

function pickSafeInternalPath(p?: string | null) {
if (!p) return undefined;
Expand Down Expand Up @@ -49,10 +50,8 @@ export default function KakaoCallbackPage() {
}
const kakaoAccessToken = tokenJson.access_token as string;

// 1) 우리 서버 로그인
const result = await loginWithKakaoAccessToken(kakaoAccessToken);

// 2) state/세션에서 복귀 경로와 액션 꺼내기
const rawState = qs.get('state');
let redirectFromState: string | undefined;
let actionFromState: any;
Expand All @@ -61,7 +60,6 @@ export default function KakaoCallbackPage() {
redirectFromState = parsed?.redirect;
actionFromState = parsed?.action;
} catch {
// 만약 state를 그냥 경로 문자열로 쓴 경우 대비
redirectFromState = rawState || undefined;
}

Expand All @@ -73,32 +71,28 @@ export default function KakaoCallbackPage() {

const action = actionFromState || (actionStorage ? JSON.parse(actionStorage) : null);

// 한번 쓰면 비워두기
sessionStorage.removeItem('postLoginRedirect');
sessionStorage.removeItem('postLoginAction');

// 3) 신규 유저는 온보딩으로
if (result.newUser) {
navigate('/register/2', { replace: true });
return;
}

// 4) 액션 재생 (예: 상세에서 비로그인으로 누른 '좋아요')
if (action?.kind === 'LIKE_PLACE' && action.contentId) {
try {
await likePlace({
contentId: action.contentId,
...(action.payload ?? {}),
});
// 선택: 돌아간 페이지에서 토스트 띄우고 싶으면 플래그 남기기

sessionStorage.setItem('postLoginToast', '좋아요 완료!');
} catch (e) {
console.error('post-login like failed', e);
sessionStorage.setItem('postLoginToast', '좋아요에 실패했어요.');
}
}

// 5) 원래 페이지로 replace 이동 (history에 콜백 안 남김)
navigate(redirectTo, { replace: true });
} catch (e) {
console.error(e);
Expand All @@ -108,5 +102,9 @@ export default function KakaoCallbackPage() {
})();
}, [navigate]);

return <div className="p-6">카카오 로그인 처리 중…</div>;
return (
<div className="grid min-h-[100dvh] place-items-center">
<Loader className="w-80" />
</div>
);
}