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');
|
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(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user