fix: TKQC Chrome 무한 로그인 루프 해결 및 SSO 리다이렉트 수정

- Service Worker 제거: 캐시 간섭으로 인한 Chrome 인증 루프 방지
  - sw.js를 자기 정리(캐시 삭제+해제) 버전으로 교체
  - auth-manager.js에 SW 해제 코드 추가 (모든 페이지 즉시 적용)
  - page-preloader.js SW 등록을 해제 로직으로 전환
- Gateway 로그인 리다이렉트: isSafeRedirect() 함수로 서브도메인 절대 URL 허용
  - *.technicalkorea.net만 허용하여 open redirect 방지 유지

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-03-09 03:13:24 +09:00
parent 81478dc6ac
commit df0a125faa
4 changed files with 50 additions and 345 deletions

View File

@@ -1,3 +1,15 @@
// 서비스 워커 해제 (캐시 간섭으로 인한 인증 루프 방지)
if ('serviceWorker' in navigator) {
navigator.serviceWorker.getRegistrations().then(function(registrations) {
registrations.forEach(function(registration) { registration.unregister(); });
});
if (typeof caches !== 'undefined') {
caches.keys().then(function(names) {
names.forEach(function(name) { caches.delete(name); });
});
}
}
/**
* 중앙화된 인증 관리자
* 페이지 간 이동 시 불필요한 API 호출을 방지하고 인증 상태를 효율적으로 관리

View File

@@ -18,12 +18,12 @@ class PagePreloader {
init() {
// 유휴 시간에 프리로딩 시작
this.schedulePreloading();
// 링크 호버 시 프리로딩
this.setupHoverPreloading();
// 서비스 워커 등록 (캐싱용)
this.registerServiceWorker();
// 기존 서비스 워커 해제 (캐시 문제 방지)
this.unregisterServiceWorker();
}
/**
@@ -274,14 +274,20 @@ class PagePreloader {
}
/**
* 서비스 워커 등록
* 기존 서비스 워커 해제 및 캐시 정리
*/
async registerServiceWorker() {
async unregisterServiceWorker() {
if ('serviceWorker' in navigator) {
try {
const registration = await navigator.serviceWorker.register('/sw.js');
const registrations = await navigator.serviceWorker.getRegistrations();
for (const registration of registrations) {
await registration.unregister();
}
// 모든 캐시 삭제
const cacheNames = await caches.keys();
await Promise.all(cacheNames.map(name => caches.delete(name)));
} catch (error) {
console.log('서비스 워커 등록 실패:', error);
// 무시
}
}
}