From 9a8102fb19bdea9a78b0fff2a94310585f1755c9 Mon Sep 17 00:00:00 2001 From: tolelom <98kimsungmin@naver.com> Date: Sun, 12 Apr 2026 19:11:23 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20AuthContext=20=EC=A4=91=EB=B3=B5=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=B6=94=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit login, setUserFromSSAFY의 토큰 저장 + 유저 상태 업데이트 로직을 applySession 헬퍼로 추출 Co-Authored-By: Claude Sonnet 4.6 --- src/context/AuthContext.jsx | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) 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(() => {