@@ -20,13 +20,12 @@ export const AuthProvider = ({ children }) => {
2020 return localStorage . getItem ( "userNickname" ) || "username" ;
2121 } ) ;
2222 const [ isAdmin , setIsAdmin ] = useState ( false ) ;
23+ const [ userId , setUserId ] = useState ( null ) ;
2324
2425 const location = useLocation ( ) ;
2526
26- const parseIsAdmin = ( token ) => {
27- if ( ! token ) {
28- return false ;
29- }
27+ const parseToken = ( token ) => {
28+ if ( ! token ) return null ;
3029 try {
3130 const base64Url = token . split ( "." ) [ 1 ] ;
3231 const base64 = base64Url . replace ( / - / g, "+" ) . replace ( / _ / g, "/" ) ;
@@ -36,18 +35,30 @@ export const AuthProvider = ({ children }) => {
3635 . map ( ( c ) => "%" + ( "00" + c . charCodeAt ( 0 ) . toString ( 16 ) ) . slice ( - 2 ) )
3736 . join ( "" )
3837 ) ;
39- const payload = JSON . parse ( jsonPayload ) ;
40- return payload ?. auth ?? false ;
38+ return JSON . parse ( jsonPayload ) ;
4139 } catch ( e ) {
42- return false ;
40+ return null ;
4341 }
4442 } ;
4543
44+ const parseIsAdmin = ( token ) => {
45+ const payload = parseToken ( token ) ;
46+ return payload ?. auth ?? false ;
47+ } ;
48+
49+ const parseUserId = ( token ) => {
50+ const payload = parseToken ( token ) ;
51+ // 백엔드 JWT 페이로드 구조에 맞게 필드 선택!
52+ // 예: payload.userId 또는 payload.id 또는 payload.sub
53+ return payload ?. id ?? payload ?. sub ?? null ;
54+ } ;
55+
4656 useEffect ( ( ) => {
4757 const accessToken = Cookies . get ( "accessToken" ) ;
4858 const refreshToken = Cookies . get ( "refreshToken" ) ;
4959 setIsAuthenticated ( ! ! accessToken && ! ! refreshToken ) ;
5060 setIsAdmin ( parseIsAdmin ( accessToken ) ) ;
61+ setUserId ( parseUserId ( accessToken ) ) ;
5162 } , [ location ] ) ;
5263
5364 const login = ( accessToken , refreshToken , userNickname ) => {
@@ -67,6 +78,7 @@ export const AuthProvider = ({ children }) => {
6778
6879 setIsAuthenticated ( true ) ;
6980 setIsAdmin ( parseIsAdmin ( accessToken ) ) ;
81+ setUserId ( parseUserId ( accessToken ) ) ;
7082 } ;
7183
7284 const logout = ( ) => {
@@ -78,6 +90,7 @@ export const AuthProvider = ({ children }) => {
7890
7991 setIsAuthenticated ( false ) ;
8092 setIsAdmin ( false ) ;
93+ setUserId ( null ) ;
8194 } ;
8295
8396 const refreshAccessToken = async ( ) => {
@@ -105,6 +118,7 @@ export const AuthProvider = ({ children }) => {
105118 } ) ;
106119 setIsAuthenticated ( true ) ;
107120 setIsAdmin ( parseIsAdmin ( accessToken ) ) ;
121+ setUserId ( parseUserId ( accessToken ) ) ;
108122 return accessToken ;
109123 } catch ( error ) {
110124 console . error ( "Access token refresh failed:" , error ) ;
@@ -128,6 +142,7 @@ export const AuthProvider = ({ children }) => {
128142 isAuthenticated,
129143 isAdmin,
130144 userNickname,
145+ userId,
131146 login,
132147 logout,
133148 refreshAccessToken,
0 commit comments