refactor: AuthContext 중복 코드 추출

login, setUserFromSSAFY의 토큰 저장 + 유저 상태 업데이트 로직을
applySession 헬퍼로 추출

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-12 19:11:23 +09:00
parent 90b75413f1
commit 9a8102fb19

View File

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