44 lines
1.6 KiB
JavaScript
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();
|
|
}; |