diff --git a/app.js b/app.js index 952e375ab1eefe8e4640271668cb1ca136c36754..594bdab5e304ddf4ddd50580d1fe1d1d557b4456 100644 --- a/app.js +++ b/app.js @@ -16,40 +16,50 @@ const app = express(); app.use(morgan('dev')); //로깅용 -// CORS 설정 + +// CORS 설정 (로컬 환경용) app.use( cors({ - origin: 'http://localhost:3000', - methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], + origin: process.env.FRONT_URL, + methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], allowedHeaders: ['Content-Type', 'Authorization'], - credentials: true, + credentials: true, }) ); - -// 미들웨어 설정 -app.use(express.json()); -app.use(express.urlencoded({ extended: false })); - -// 세션 설정 +// 세션 설정 (로컬 테스트용) app.use( session({ - secret: 'your_session_secret', + secret: 'your-secret-key', resave: false, saveUninitialized: false, + rolling: true, + cookie: { + httpOnly: true, + secure: false, // HTTPS가 아닌 환경에서는 false로 설정 + maxAge: 60 * 60 * 1000, + sameSite: 'lax', + }, }) ); +// 미들웨어 설정 +app.use(express.json()); +app.use(express.urlencoded({ extended: false })); + // Passport 초기화 및 세션 연결 app.use(passport.initialize()); app.use(passport.session()); app.use(flash()); + + +app.set('trust proxy', 1); console.log('MongoDB URI:', process.env.MONGO_URI); //라우터 등록 const authRoutes = require('./routes/auth'); -app.use('/auth', authRoutes); +app.use('/api/auth', authRoutes); const scheduleRoutes = require('./routes/schedule'); app.use('/api/schedule', scheduleRoutes); @@ -66,6 +76,9 @@ app.use('/api/chat', chatRoutes); const memberRoutes = require('./routes/memberRoute'); app.use('/api/member', memberRoutes); +const sessionRouter = require('./routes/session'); +app.use('/api/session', sessionRouter); + // 스케줄 클리너 초기화 initScheduleCleaner(); @@ -86,4 +99,4 @@ const PORT = process.env.PORT || 3000; console.error('❌ 서버 시작 중 오류 발생:', error); process.exit(1); } -})(); \ No newline at end of file +})(); diff --git a/routes/auth.js b/routes/auth.js index 7eda249d0f05a64d3537bc0462e2da4f7c6fd831..658305911f7cb27e6573dfac091b0d051c3c8ec5 100644 --- a/routes/auth.js +++ b/routes/auth.js @@ -1,35 +1,51 @@ -// routes/auth.js - const express = require('express'); const passport = require('passport'); const router = express.Router(); -// GET /auth/login -router.get('/login', (req, res) => { - res.send('<a href="/auth/google">Log in with Google</a>'); -}); - -// GET /auth/logout -router.get('/logout', (req, res) => { - req.logout(() => { - res.redirect('/'); - }); -}); - -// GET /auth/google +// Google OAuth 로그인 라우터 router.get( - '/google', - passport.authenticate('google', { scope: ['profile', 'email'] }) + '/login', + passport.authenticate('google', { + scope: ['profile', 'email'], // 사용자 정보 요청을 위한 scope + failureRedirect: `${process.env.FRONT_URL}/login` + }) ); -// GET /auth/google/callback +// Google OAuth 콜백 라우터 router.get( '/google/callback', - passport.authenticate('google', { failureRedirect: '/auth/login' }), + passport.authenticate('google', { + failureRedirect: '/auth/login' + }), (req, res) => { - res.redirect('/'); + const redirectUrl = process.env.FRONT_URL; + req.session.save((err) => { + if (err) { + console.error('세션 저장 오류:', err); + return res.status(500).json({ error: '서버 오류' }); + } + res.redirect(redirectUrl); + }); } ); -module.exports = router; +// 로그아웃 라우터 +router.get('/logout', (req, res) => { + if (req.session) { + req.session.destroy((err) => { + if (err) { + console.error('세션 삭제 오류:', err); + return res.status(500).json({ error: '서버 오류' }); + } + const redirectUrl = process.env.FRONT_URL; + res.redirect(redirectUrl); + }); + } else { + // 세션이 없는 경우에도 리다이렉트 + const redirectUrl = process.env.FRONT_URL; + res.redirect(redirectUrl); + } +}); + +module.exports = router; \ No newline at end of file