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:
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
},
|
||||
|
||||
@@ -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';
|
||||
|
||||
// 모델에 전달할 조회 옵션 객체 생성
|
||||
|
||||
Reference in New Issue
Block a user