1+ 'use client'
2+
3+ import { useState , useMemo } from 'react' ;
4+ import { useAuthenticatedApi } from '@/hooks/useAuthenticatedApi' ;
5+ import { useAuth } from '@/hooks/useAuth' ;
6+
7+ export default function TestAuthPage ( ) {
8+ const { apiClient } = useAuthenticatedApi ( ) ;
9+ const { accessToken } = useAuth ( ) ;
10+
11+ const isLoggedIn = Boolean ( accessToken ) ;
12+ const maskedToken = useMemo ( ( ) => {
13+ if ( ! accessToken ) return '-' ;
14+ const head = String ( accessToken ) . slice ( 0 , 8 ) ;
15+ const tail = String ( accessToken ) . slice ( - 6 ) ;
16+ return `${ head } ...${ tail } ` ;
17+ } , [ accessToken ] ) ;
18+
19+ const [ loading , setLoading ] = useState ( false ) ;
20+ const [ httpStatus , setHttpStatus ] = useState ( null ) ;
21+ const [ payload , setPayload ] = useState ( null ) ;
22+ const [ errorText , setErrorText ] = useState ( '' ) ;
23+
24+ const handleCallAuthApi = async ( ) => {
25+ setLoading ( true ) ;
26+ setErrorText ( '' ) ;
27+ setPayload ( null ) ;
28+ setHttpStatus ( null ) ;
29+ try {
30+ const res = await apiClient . get ( '/recruit/members' , {
31+ params : { page : 0 , size : 20 , sort : 'createdAt' , dir : 'DESC' } ,
32+ } ) ;
33+ setHttpStatus ( res . status ) ;
34+ setPayload ( res . data ) ;
35+ } catch ( err ) {
36+ const status = err ?. response ?. status ?? 'NETWORK_ERROR' ;
37+ setHttpStatus ( status ) ;
38+ if ( err ?. response ?. data ) setPayload ( err . response . data ) ;
39+ setErrorText ( String ( err ?. message || 'request failed' ) ) ;
40+ } finally {
41+ setLoading ( false ) ;
42+ }
43+ } ;
44+
45+ return (
46+ < div className = 'min-h-screen w-full px-6 py-10 text-white' >
47+ < h1 className = 'text-2xl font-bold mb-6' > 로그인 테스트</ h1 >
48+
49+ < section className = 'mb-6' >
50+ < div className = 'mb-1' > 현재 로그인 상태</ div >
51+ < div className = { `inline-block rounded px-3 py-1 ${ isLoggedIn ? 'bg-green-600' : 'bg-red-600' } ` } >
52+ { isLoggedIn ? '로그인됨' : '미로그인' }
53+ </ div >
54+ < div className = 'mt-2 text-sm text-gray-300' > 액세스 토큰: { maskedToken } </ div >
55+ </ section >
56+
57+ < section className = 'mb-6' >
58+ < button
59+ onClick = { handleCallAuthApi }
60+ disabled = { loading }
61+ className = { `rounded px-4 py-2 ${ loading ? 'bg-gray-500' : 'bg-blue-600 hover:bg-blue-500' } ` }
62+ >
63+ { loading ? '요청 중...' : '인증 API 호출 (/api/v1/recruit/members)' }
64+ </ button >
65+ </ section >
66+
67+ < section >
68+ < div className = 'mb-2 font-semibold' > 응답</ div >
69+ < div className = 'mb-1 text-sm' > HTTP Status: { httpStatus ?? '-' } </ div >
70+ { errorText && (
71+ < div className = 'mb-2 text-red-400 text-sm' > 에러: { errorText } </ div >
72+ ) }
73+ < pre className = 'bg-black/40 rounded p-3 overflow-auto max-h-[50vh] text-sm' >
74+ { JSON . stringify ( payload , null , 2 ) || '-' }
75+ </ pre >
76+ </ section >
77+ </ div >
78+ ) ;
79+ }
0 commit comments