diff --git a/app.js b/app.js index 594bdab5e304ddf4ddd50580d1fe1d1d557b4456..1841e8c6b62a0e6775f02957149ac40c1e651885 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 afc74eaad5520ace4dbb2b36a9a644cec88e8387..315edee527c5ca2ee1d9dbbb00ac915838b01e27 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 cd23c9d71bce1b6ef26e59ee92bb8d3d3ef1f829..f6698b36fab68e39e1d5b078802a20e197594797 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 658305911f7cb27e6573dfac091b0d051c3c8ec5..186b15d2074cc30200de1f2e047fb6a8ef93646e 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 0000000000000000000000000000000000000000..77a3b118a8050b3167a10494921698230699b5b6 --- /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