o2o-negosium-original/frontend/src/App.tsx
민헌 c0d224ef21 feat(frontend): 인증 연동 (로그인/로그아웃/내정보/라우트 가드)
- 로그인 실연동: 성공 시 access/refresh 토큰 저장, me 캐시 무효화
- SidebarFooter: useMeQuery 로 공급사명 표시, useLogoutMutation 로 로그아웃
- RequireAuth 가드로 /list·/chat 보호, 토큰 없으면 로그인으로
- 인증 만료/폐기 시 로그인 페이지로 이동(setUnauthorizedHandler)
- LoginPage: 이미 로그인 상태면 목록으로 리다이렉트

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 13:12:23 +09:00

38 lines
823 B
TypeScript

import { createBrowserRouter, RouterProvider } from 'react-router'
import { setUnauthorizedHandler } from '@/apis'
import { RequireAuth } from '@/features/auth'
import LoginPage from '@/pages/LoginPage'
import ListPage from '@/pages/ListPage'
import ChatPage from '@/pages/ChatPage'
const router = createBrowserRouter([
{ path: '/', element: <LoginPage /> },
{
path: '/list',
element: (
<RequireAuth>
<ListPage />
</RequireAuth>
),
},
{
path: '/chat',
element: (
<RequireAuth>
<ChatPage />
</RequireAuth>
),
},
])
// 토큰 만료/폐기로 인증이 끊기면 로그인 페이지로 이동시킨다.
setUnauthorizedHandler(() => {
void router.navigate('/')
})
function App() {
return <RouterProvider router={router} />
}
export default App