diff --git a/routes/authRoute.js b/routes/authRoute.js index e6f2d553e56f361aec5c9f6ca82d664c1b5034ff..a83f6d484e2469e47eebbd4d6af82392b619c61f 100644 --- a/routes/authRoute.js +++ b/routes/authRoute.js @@ -1,53 +1,78 @@ - const express = require('express'); - const passport = require('passport'); +const express = require('express'); +const passport = require('passport'); +const MemberService = require('../services/memberService'); - const router = express.Router(); +const router = express.Router(); - // Google OAuth 로그인 라우터 - router.get( - '/login', - passport.authenticate('google', { - scope: ['profile', 'email'], // 사용자 정보 요청을 위한 scope - failureRedirect: `${process.env.FRONT_URL}/login` - }) - ); +// Google OAuth 로그인 라우터 +router.get( + '/login', + (req, res, next) => { + const { state } = req.query; // 클라이언트에서 전달된 state(fcmToken) + console.log("State received at /login:", state); - router.get( - '/google/callback', - passport.authenticate('google', { - failureRedirect: `${process.env.FRONT_URL}/login` - }), - (req, res) => { - const redirectUrl = process.env.FRONT_URL; - req.session.save((err) => { - if (err) { - console.error('세션 저장 오류:', err); - return res.status(500).json({ error: '서버 오류' }); - } - res.redirect(redirectUrl); - }); + passport.authenticate("google", { + scope: ["profile", "email"], // 요청할 사용자 정보 + state, // 전달받은 fcmToken을 state로 설정 + })(req, res, next); + } +); + +router.get( + '/google/callback', + passport.authenticate('google', { + failureRedirect: `${process.env.FRONT_URL}/login` + }), + async (req, res) => { + // Google OAuth 인증 성공 후 state 파라미터로 전달된 fcmToken 가져오기 + const fcmToken = req.query.state; + console.log("받아온 fcmToken", fcmToken); + const userEmail = req.user.email; // Google 로그인에서 가져온 email + const redirectUrl = process.env.FRONT_URL; + req.session.userEmail = userEmail; // 세션에 사용자 이메일 저장 + + try { + if (fcmToken) { + // FCM 토큰 등록 + await MemberService.registerToken(userEmail, fcmToken); + console.log(`FCM token registered for user: ${userEmail}`); + } else { + console.warn("No FCM token provided during login"); + } + } catch (error) { + console.error("Error registering FCM token during login:", error); } - ); - // 로그아웃 라우터 - 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 { - // 세션이 없는 경우에도 리다이렉트 + req.session.save((err) => { + if (err) { + console.error('세션 저장 오류:', err); + return res.status(500).json({ error: '서버 오류' }); + } + res.redirect(redirectUrl); + + }); + } +); + +// 로그아웃 라우터 +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); + } +}); + +// 사용자 삭제 라우터 router.delete('/leave', async (req, res) => { try { // 인증된 사용자 확인 @@ -81,4 +106,4 @@ router.delete('/leave', async (req, res) => { } }); - module.exports = router; \ No newline at end of file +module.exports = router; \ No newline at end of file diff --git a/routes/chatRoute.js b/routes/chatRoute.js index e7c2769ca7ec5a4cf449694190885d2f19333046..ed55aa560c36105aff3706f702bda26fe0c6f234 100644 --- a/routes/chatRoute.js +++ b/routes/chatRoute.js @@ -1,6 +1,7 @@ const express = require('express'); const router = express.Router(); const chatController = require('../controllers/chatController'); +const { isLoggedIn } = require('../middlewares/auth'); router.post('/create-room', chatController.createChatRoom); router.get('/rooms', chatController.getChatRooms); @@ -10,6 +11,9 @@ router.get('/unread-messages/:nickname', chatController.getUnreadMessages); router.get('/unread-count/:chatRoomId', chatController.getUnreadCount); router.post('/update-status-and-logid', chatController.updateStatusAndLogId); router.post('/update-read-log-id', chatController.updateReadLogId); + +router.use(isLoggedIn); + router.post('/:chatRoomId/notices', chatController.addNotice); router.get('/:chatRoomId/notices/latest', chatController.getLatestNotice); router.get('/:chatRoomId/notices', chatController.getAllNotices); diff --git a/services/memberService.js b/services/memberService.js index 0435672d90a949dd46dcb7bad1de73d7fe764f69..ebe4fe15d7974bcfce53ad99dbc732ed79672bc2 100644 --- a/services/memberService.js +++ b/services/memberService.js @@ -25,7 +25,7 @@ class MemberService { } // 3. MongoDB에서 관련 채팅방의 FCM 토큰 업데이트 - const existingChatRooms = await ChatRoom.find({ "participants.name": user.name }); + const existingChatRooms = await ChatRooms.find({ "participants.name": user.name }); for (const room of existingChatRooms) { room.participants = room.participants.map((participant) => { if (participant.name === user.name) {