// js/auth.js /** * JWT 토큰을 디코딩하여 페이로드(내용)를 반환합니다. * @param {string} token - JWT 토큰 * @returns {object|null} - 디코딩된 페이로드 객체 또는 파싱 실패 시 null */ export function parseJwt(token) { try { return JSON.parse(atob(token.split('.')[1])); } catch (e) { console.error("잘못된 토큰입니다.", e); return null; } } /** * 인증 토큰을 가져옵니다 (쿠키 → localStorage 폴백). */ export function getToken() { if (window.getSSOToken) return window.getSSOToken(); return localStorage.getItem('sso_token') || localStorage.getItem('token'); } /** * 사용자 정보를 가져옵니다 (쿠키 → localStorage 폴백). */ export function getUser() { if (window.getSSOUser) return window.getSSOUser(); const raw = localStorage.getItem('sso_user') || localStorage.getItem('user'); try { return raw ? JSON.parse(raw) : null; } catch(e) { return null; } } /** * 로그인 성공 후 토큰과 사용자 정보를 저장합니다. * 하위 호환성을 위해 sso_token/sso_user와 token/user 모두에 저장합니다. */ export function saveAuthData(token, user) { const userStr = JSON.stringify(user); // SSO 키 localStorage.setItem('sso_token', token); localStorage.setItem('sso_user', userStr); // 하위 호환 키 (캐시된 구버전 app-init.js 대응) localStorage.setItem('token', token); localStorage.setItem('user', userStr); } /** * 로그아웃 시 인증 정보를 제거합니다. */ export function clearAuthData() { if (window.clearSSOAuth) { window.clearSSOAuth(); return; } localStorage.removeItem('sso_token'); localStorage.removeItem('sso_user'); localStorage.removeItem('token'); localStorage.removeItem('user'); localStorage.removeItem('userPageAccess'); } /** * 현재 사용자가 로그인 상태인지 확인합니다. */ export function isLoggedIn() { const token = getToken(); return !!token && token !== 'undefined' && token !== 'null'; }