diff --git a/package-lock.json b/package-lock.json index 494343d..a524703 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1026,8 +1026,7 @@ "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.3.2.tgz", "integrity": "sha512-zfWWa+V2ViDCY/cmUfRqeWY1yLto+EpxjXnZzenB1TyxsTiXaTWeZFIZw6mac52BsuQm0RjCnisjBtdBaXOI6w==", "devOptional": true, - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/@electric-sql/pglite-socket": { "version": "0.0.6", @@ -2689,7 +2688,8 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "devOptional": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/dayjs": { "version": "1.11.19", @@ -2910,7 +2910,6 @@ "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", - "peer": true, "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", @@ -3341,7 +3340,6 @@ "integrity": "sha512-BIdolzGpDO9MQ4nu3AUuDwHZZ+KViNm+EZ75Ae55eMXMqLVhDFqEMXxtUe9Qh8hjL+pIna/frs2j6Y2yD5Ua/g==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=16.9.0" } @@ -4186,7 +4184,6 @@ "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@prisma/config": "7.2.0", "@prisma/dev": "0.17.0", @@ -4461,7 +4458,8 @@ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "devOptional": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/semver": { "version": "7.7.3", diff --git a/src/controllers/auth.controller.js b/src/controllers/auth.controller.js index 0d339e7..37581c6 100644 --- a/src/controllers/auth.controller.js +++ b/src/controllers/auth.controller.js @@ -23,5 +23,23 @@ export class AuthController{ next(error); } } + + //카카오 로그아웃 + async logout(req, res, next) { + try { + if (!req.user) { + throw new UnauthorizedError("UNAUTHORIZED", "인증 정보가 없습니다"); + } + + return res.status(200).json({ + resultType: "SUCCESS", + message: "카카오 로그아웃이 완료되었습니다." + }); + } catch (error) { + next(error); + } + } } + + diff --git a/src/routes/auth.route.js b/src/routes/auth.route.js index 8f544ab..5f9f25f 100644 --- a/src/routes/auth.route.js +++ b/src/routes/auth.route.js @@ -40,4 +40,12 @@ router.delete( authController.kakaoWithdraw.bind(authController) ); +//카카오 로그아웃 +router.post( + "/logout", + passport.authenticate("jwt", { session: false }), + authController.logout.bind(authController) +); + + export default router; \ No newline at end of file diff --git a/src/services/auth.service.js b/src/services/auth.service.js index 4af867b..8589ab1 100644 --- a/src/services/auth.service.js +++ b/src/services/auth.service.js @@ -1,7 +1,7 @@ import { prisma } from "../db.config.js"; import jwt from "jsonwebtoken"; import { BadRequestError, InternalServerError } from "../errors/custom.error.js" - +import axios from "axios"; export class KakaoAuthService { constructor(){ @@ -120,4 +120,24 @@ export class KakaoAuthService { throw new InternalServerError("USER_WITHDRAW_FAILED","회원 탈퇴 처리 중 오류가 발생했습니다."); } } + + //카카오 로그아웃(아직 미정) + async logoutKakaoUser(kakaoAccessToken){ + if(!kakaoAccessToken){ + throw new BadRequestError("KAKAO_ACCESS_TOKEN_REQUIRED", "카카오 로그인을 위한 토큰이 필요합니다."); + } + try{ + await axios.post( + "https://kapi.kakao.com/v1/user/logout", + {}, + { + headers: { + Authorization: `Bearer ${kakaoAccessToken}`, + } + } + ); + }catch (error){ + throw new InternalServerError("KAKAO_LOGOUT_FAILED","카카오 로그아웃 처리 중 오류가 발생했습니다."); + } + } } \ No newline at end of file