From 95f8e1239e80a809e746a19c2b8e36a9c6fbbd7f Mon Sep 17 00:00:00 2001 From: tpgus2603 <kakaneymar2424@gmail.com> Date: Sun, 8 Dec 2024 15:37:55 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EB=A1=9C=EC=BB=AC=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EC=9A=A9=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 2 +- middlewares/auth.js | 13 +++++++------ passport/googleStrategy.js | 8 ++++---- routes/auth.js | 3 +-- routes/session.js | 26 ++++++++++++++++++++++++++ 5 files changed, 39 insertions(+), 13 deletions(-) create mode 100644 routes/session.js diff --git a/app.js b/app.js index 594bdab..1841e8c 100644 --- a/app.js +++ b/app.js @@ -55,7 +55,7 @@ app.use(passport.session()); app.use(flash()); -app.set('trust proxy', 1); +//app.set('trust proxy', 1); console.log('MongoDB URI:', process.env.MONGO_URI); //라우터 등록 const authRoutes = require('./routes/auth'); diff --git a/middlewares/auth.js b/middlewares/auth.js index afc74ea..315edee 100644 --- a/middlewares/auth.js +++ b/middlewares/auth.js @@ -1,15 +1,16 @@ // middlewares/auth.js - -exports.isLoggedIn = (req, res, next) => { //로그인된 사용자자만 접근허용 +exports.isLoggedIn = (req, res, next) => { // 로그인된 사용자만 접근 허용 if (req.isAuthenticated()) { return next(); } - res.redirect('/auth/login'); + // 리다이렉트 대신 401 Unauthorized 상태 반환 + res.status(401).json({ error: '로그인 되지않은 사용자' }); }; -exports.isNotLoggedIn = (req, res, next) => { //로그인 안되면 리다이렉트 +exports.isNotLoggedIn = (req, res, next) => { // 로그인 안된 사용자만 접근 허용 if (!req.isAuthenticated()) { return next(); } - res.redirect('/'); -}; + // 리다이렉트 대신 400 Bad Request 상태 반환 (필요에 따라 변경 가능) + res.status(400).json({ error: '이미 로그인된' }); +}; \ No newline at end of file diff --git a/passport/googleStrategy.js b/passport/googleStrategy.js index cd23c9d..f6698b3 100644 --- a/passport/googleStrategy.js +++ b/passport/googleStrategy.js @@ -1,15 +1,15 @@ // passport/googleStrategy.js - const { Strategy: GoogleStrategy } = require('passport-google-oauth20'); -const User = require('../models/user'); +const User = require('../models/user'); module.exports = new GoogleStrategy( { clientID: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, callbackURL: process.env.CALLBACK_URL, + passReqToCallback: true, // req 객체를 콜백에 전달 }, - async (accessToken, refreshToken, profile, done) => { + async (req, accessToken, refreshToken, profile, done) => { try { // 프로필에서 사용자 정보 추출 const email = profile.emails[0].value; @@ -23,7 +23,7 @@ module.exports = new GoogleStrategy( return done(null, user); } catch (err) { - return done(err); + return done(err, null); } } ); diff --git a/routes/auth.js b/routes/auth.js index 6583059..186b15d 100644 --- a/routes/auth.js +++ b/routes/auth.js @@ -12,11 +12,10 @@ router.get( }) ); -// Google OAuth 콜백 라우터 router.get( '/google/callback', passport.authenticate('google', { - failureRedirect: '/auth/login' + failureRedirect: `${process.env.FRONT_URL}/login` // 수정된 부분 }), (req, res) => { const redirectUrl = process.env.FRONT_URL; diff --git a/routes/session.js b/routes/session.js new file mode 100644 index 0000000..77a3b11 --- /dev/null +++ b/routes/session.js @@ -0,0 +1,26 @@ +const express = require('express'); +const router = express.Router(); + +// GET /api/session/info +router.get('/info', (req, res) => { + if (req.user) { + const { email, name } = req.user; + // 캐싱 비활성화 + res.set('Cache-Control', 'no-store'); + res.set('Pragma', 'no-cache'); + return res.status(200).json({ + user: { + email, + name, + }, + }); + } + // 세션이 만료되었거나 사용자 정보가 없는 경우 + res.set('Cache-Control', 'no-store'); + res.set('Pragma', 'no-cache'); + res.status(401).json({ + message: '세션이 만료되었거나 사용자 정보가 없습니다.', + }); +}); + +module.exports = router; \ No newline at end of file -- GitLab