Files
PM_test/oauth/oauthController.js
2026-06-12 17:14:03 +09:00

44 lines
1.6 KiB
JavaScript

const crypto = require('crypto');
const oauthService = require('./oauthService');
const axios = require('axios');
// 1. 로그인 여부 검증 미들웨어
exports.isLoggedIn = async (req, res, next) => {
if (req.session?.user || (req.isAuthenticated && req.isAuthenticated())) {
return next();
}
console.log('🚥 [oauthController] User not authenticated. Redirecting to login page.');
return res.redirect('/user/login?path=' + encodeURIComponent(req.originalUrl));
};
// 2. OAuth Callback 핸들러 (로컬 개발 환경에서는 직접 호출되지 않음)
exports.handleCallback = async (req, res) => {
const { code, state, next } = req.query;
try {
const { user } = await oauthService.exchangeToken(code, state, req.hostname);
req.session.user = user;
req.user = user;
return res.redirect(next || "/");
} catch (err) {
console.error("Token exchange error:", err);
return res.status(500).send("토큰 처리 실패");
}
};
// 3. 사용자 정보 역직렬화 (GSIM 연동 우회 및 가상 최고권한 권한 설정)
exports.deserializeUser = async (req, res, next) => {
if (req.session?.user) {
req.user = {
user_id: req.session.user.userId,
user_nm: req.session.user.user_nm,
group: req.session.user.group,
company: '한맥기술',
dept: '개발본부',
position: '부장',
permission: 1535, // master/dev급 세부 권한 비트플래그
bookmark: ''
};
}
next();
};