refactor: AuthContext 중복 코드 추출
login, setUserFromSSAFY의 토큰 저장 + 유저 상태 업데이트 로직을 applySession 헬퍼로 추출 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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(() => {
|
||||
|
||||
Reference in New Issue
Block a user