From 177fc7540866e343a41add7c47ac095fe2b4e9e7 Mon Sep 17 00:00:00 2001 From: tpgus2603 <kakaneymar2424@gmail.com> Date: Tue, 3 Dec 2024 14:03:47 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EB=A6=AC=EB=8B=A4=EC=9D=B4=EB=A0=89=ED=8A=B8=20url=20=ED=94=84?= =?UTF-8?q?=EB=A1=A0=ED=8A=B8=EB=A1=9C=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 | 11 ++++++----- passport/googleStrategy.js | 8 ++++---- routes/auth.js | 33 +++++++++++++++++++++++++-------- 4 files changed, 36 insertions(+), 18 deletions(-) diff --git a/app.js b/app.js index 952e375..937f5c0 100644 --- a/app.js +++ b/app.js @@ -19,7 +19,7 @@ app.use(morgan('dev')); //濡쒓퉭�� // CORS �ㅼ젙 app.use( cors({ - origin: 'http://localhost:3000', + origin: process.env.FRONTEND_URL, methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], allowedHeaders: ['Content-Type', 'Authorization'], credentials: true, diff --git a/middlewares/auth.js b/middlewares/auth.js index afc74ea..52eb397 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: '�대� 濡쒓렇�몃맂' }); }; diff --git a/passport/googleStrategy.js b/passport/googleStrategy.js index cd23c9d..ada1aef 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 7eda249..16247d5 100644 --- a/routes/auth.js +++ b/routes/auth.js @@ -1,5 +1,4 @@ // routes/auth.js - const express = require('express'); const passport = require('passport'); @@ -12,23 +11,41 @@ router.get('/login', (req, res) => { // GET /auth/logout router.get('/logout', (req, res) => { - req.logout(() => { - res.redirect('/'); + req.logout((err) => { + if (err) { + return res.status(500).json({ error: 'Failed to logout' }); + } + res.redirect(process.env.FRONTEND_URL); }); }); // GET /auth/google -router.get( - '/google', - passport.authenticate('google', { scope: ['profile', 'email'] }) -); +router.get('/google', (req, res, next) => { + const redirectUrl = req.query.redirectUrl || process.env.FRONTEND_URL; + + // 由щ떎�대젆�� URL 寃�利� + const allowedDomains = [process.env.FRONTEND_URL]; + if (!allowedDomains.some((domain) => redirectUrl.startsWith(domain))) { + return res.status(400).json({ error: 'Invalid redirect URL' }); + } + + // �몄뀡�� redirectUrl ���� + req.session.redirectUrl = redirectUrl; + + passport.authenticate('google', { scope: ['profile', 'email'] })(req, res, next); +}); // GET /auth/google/callback router.get( '/google/callback', passport.authenticate('google', { failureRedirect: '/auth/login' }), (req, res) => { - res.redirect('/'); + // �몄뀡�먯꽌 redirectUrl 媛��몄삤湲� + const redirectUrl = req.session.redirectUrl || process.env.FRONTEND_URL; + + // �몄뀡�먯꽌 redirectUrl �쒓굅 + req.session.redirectUrl = null; + res.redirect(redirectUrl); } ); -- GitLab