diff --git a/src/context/AuthContext.jsx b/src/context/AuthContext.jsx index 1144c8d..405179e 100644 --- a/src/context/AuthContext.jsx +++ b/src/context/AuthContext.jsx @@ -15,27 +15,26 @@ export function AuthProvider({ children }) { const username = localStorage.getItem('username'); if (!token) return null; const payload = decodeTokenPayload(token); - const role = payload?.role || 'user'; - return { token, username, role }; + return { token, username, role: payload?.role || 'user' }; }); + // 토큰 저장 + 유저 상태 업데이트 공통 처리 (login, setUserFromSSAFY에서 공유) + const applySession = useCallback((data) => { + localStorage.setItem('token', data.token); + localStorage.setItem('username', data.username); + const role = decodeTokenPayload(data.token)?.role || 'user'; + setUser({ token: data.token, username: data.username, role }); + }, []); + const login = useCallback(async (username, password) => { const data = await apiLogin(username, password); - localStorage.setItem('token', data.token); - localStorage.setItem('username', data.username); - const decoded = decodeTokenPayload(data.token); - const role = decoded?.role || 'user'; - setUser({ token: data.token, username: data.username, role }); - }, []); + applySession(data); + }, [applySession]); // SSAFY OAuth 콜백에서 받은 토큰으로 로그인 처리 const setUserFromSSAFY = useCallback((data) => { - localStorage.setItem('token', data.token); - localStorage.setItem('username', data.username); - const decoded = decodeTokenPayload(data.token); - const role = decoded?.role || 'user'; - setUser({ token: data.token, username: data.username, role }); - }, []); + applySession(data); + }, [applySession]); // 로컬 세션만 정리 (토큰 만료·강제 로그아웃 시) const clearSession = useCallback(() => {