fix: 전 시스템 Chrome 무한 로그인 루프 해결 및 role 대소문자 통일

- gateway: 로그인 페이지 자동 리다이렉트 시 SSO 쿠키 재설정 + Cache-Control no-store
- tkreport(system2): SW 해제, 401 핸들러 리다이렉트 제거, 루프 방지, localStorage 백업
- TKQC 모바일(system3): mCheckAuth를 authManager 위임으로 변경, 루프 방지
- TKQC 공통(system3): api.js 로그인 URL 캐시 버스팅, auth-manager localStorage 백업
- tkuser: SW 해제, 401 핸들러 수정, 루프 방지, localStorage 백업, requireAdmin role 소문자 통일
- system1: 작업보고서 admin role 대소문자 무시, refresh 토큰에 role 필드 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-03-09 14:10:46 +09:00
parent df0a125faa
commit 5aeda43605
18 changed files with 144 additions and 49 deletions

View File

@@ -135,7 +135,7 @@ const getDailyWorkReports = async (req, res) => {
try {
const userInfo = {
user_id: req.user?.user_id || req.user?.id,
role: req.user?.role || 'user'
role: (req.user?.role || req.user?.access_level || 'user').toLowerCase()
};
if (!userInfo.user_id) {
@@ -303,7 +303,7 @@ const updateWorkReport = async (req, res) => {
const updateData = req.body;
const userInfo = {
user_id: req.user?.user_id || req.user?.id,
role: req.user?.role || 'user'
role: (req.user?.role || req.user?.access_level || 'user').toLowerCase()
};
if (!userInfo.user_id) {

View File

@@ -137,9 +137,11 @@ router.post('/refresh-token', async (req, res) => {
const connection = await getDb();
// 사용자 정보 조회
// 사용자 정보 조회 (roles 조인으로 role_name 포함)
const [users] = await connection.execute(
'SELECT * FROM users WHERE user_id = ? AND is_active = TRUE',
`SELECT u.*, r.name as role_name, u._access_level_old as access_level
FROM users u LEFT JOIN roles r ON u.role_id = r.id
WHERE u.user_id = ? AND u.is_active = TRUE`,
[decoded.user_id]
);
@@ -149,11 +151,12 @@ router.post('/refresh-token', async (req, res) => {
const user = users[0];
// 새 토큰 발급
// 새 토큰 발급 (role 필드 포함)
const newToken = jwt.sign(
{
user_id: user.user_id,
username: user.username,
role: user.role_name || user.access_level || 'user',
access_level: user.access_level,
name: user.name || user.username
},

View File

@@ -128,8 +128,9 @@ const getDailyWorkReportsService = async (queryParams, userInfo) => {
});
}
// 관리자 여부 확인
const isAdmin = role === 'system' || role === 'admin';
// 관리자 여부 확인 (대소문자 무시)
const roleLower = (role || '').toLowerCase();
const isAdmin = roleLower === 'system' || roleLower === 'admin' || roleLower === 'system admin';
const canViewAll = isAdmin || view_all === 'true';
// 모델에 전달할 조회 옵션 객체 생성