From 39c45e32c5bf2a207e6dafdb2552db268457dc24 Mon Sep 17 00:00:00 2001
From: tpgus2603 <kakaneymar2424@gmail.com>
Date: Sun, 8 Dec 2024 13:48:47 +0900
Subject: [PATCH] =?UTF-8?q?test:=20=EB=A1=9C=EC=BB=AC=ED=99=98=EA=B2=BD=20?=
 =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=9A=A9=20=EB=A6=AC=ED=8C=A9?=
 =?UTF-8?q?=ED=86=A0=EB=A7=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app.js         | 39 ++++++++++++++++++++++-----------
 routes/auth.js | 58 ++++++++++++++++++++++++++++++++------------------
 2 files changed, 63 insertions(+), 34 deletions(-)

diff --git a/app.js b/app.js
index 952e375..594bdab 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 7eda249..6583059 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
-- 
GitLab