diff --git a/src/common/database/index.js b/src/common/database/index.js index 198d2764bb68012afb4a30e886fa48ef4e151d39..3fb3ca104854d47086b4d74156c667dd2a9ecb12 100644 --- a/src/common/database/index.js +++ b/src/common/database/index.js @@ -2,10 +2,10 @@ const mysql = require("mysql2"); const connection = mysql.createConnection({ host: "127.0.0.1", - port: 3000, + port: 3306, user: "root", password: "1234", - database: "cakaatalk", + database: "cakaotalk", }); connection.connect((err) => { diff --git a/src/common/jwt/jwt.controller.js b/src/common/jwt/jwt.controller.js index 82391731dd9e390c276f925199d293ba01163411..9ec7a58773b8cb197a5ac5b2da765d95872f3141 100644 --- a/src/common/jwt/jwt.controller.js +++ b/src/common/jwt/jwt.controller.js @@ -1,5 +1,4 @@ const jwt = require('jsonwebtoken') -const AuthToken = require('../../modules/auth/AuthToekn.js') const jwtService = require('./jwt.service.js') const ACCESS_SECRET_KEY = process.env.ACCESS_TOKEN_PRIVATE_KEY; const REFRESH_SECRET_KEY = process.env.REFRESH_TOKEN_PRIVTATE_KEY; @@ -32,10 +31,11 @@ exports.generateRefreshToken = (email) => { ) } -exports.generateTokens = async (user) => { +exports.generateTokens = async (email) => { try { - const accessToken = this.generateAccessToken(user.email); - const refreshToken = this.generateRefreshToken(user.email); + const accessToken = this.generateAccessToken(email); + const refreshToken = this.generateRefreshToken(email); + const result = await jwtService.insertRefreshToken(email, refreshToken); // DB에서 Token 있는지 검사 const existRefreshToken = await jwtService.checkRefreshToken(refreshToken); @@ -47,11 +47,19 @@ exports.generateTokens = async (user) => { } }; -exports.validateToken = (accessToken, refreshToken) => { - +exports.validateToken = async (accessToken, refreshToken) => { + return new Promise(async (resolve, reject) => { + try { + const email = await verifyAccessToken(accessToken, refreshToken); + resolve(email); + } catch (err) { + console.err("Authentication 실패"); + reject(err); + } + }) } -function verifyAccessToken(accessToken) { +function verifyAccessToken(accessToken, refreshToken) { return new Promise((resolve, reject) => { try { resolve(jwt.verify(accessToken, ACCESS_SECRET_KEY)); diff --git a/src/common/jwt/jwt.service.js b/src/common/jwt/jwt.service.js index a6aeb2e44114961abb4b3042f1ae3b798ba57c48..4db510b8213ed40b74a277607b706ff2cc11b511 100644 --- a/src/common/jwt/jwt.service.js +++ b/src/common/jwt/jwt.service.js @@ -17,10 +17,22 @@ exports.checkRefreshToken = (refreshToken) => { }); } +exports.insertRefreshToken = (email, refreshToken) => { + return new Promise((resolve, reject) => { + mysql.query('INSERT INTO AUTH (refresh_token, email) VALUES (?, ?);', [refreshToken, email], (err, results) => { + if (err) { + reject(err); + } else { + resolve(results); + } + }); + }); +} + // RefreshToken 삭제 함수 exports.deleteRefreshToken = (refreshToken) => { return new Promise((resolve, reject) => { - connection.query('DELETE FROM AUTH WHERE refresh_token = ?', [refreshToken], (err, results) => { + mysql.query('DELETE FROM AUTH WHERE refresh_token = ?', [refreshToken], (err, results) => { if (err) { reject(err); } else { diff --git a/src/modules/auth/auth.controller.js b/src/modules/auth/auth.controller.js index f2c29046b4330612f4318f6c5babb3d9012d3d97..f2fcc04846dfcd5757a77be2ab1d2fc686e7fc66 100644 --- a/src/modules/auth/auth.controller.js +++ b/src/modules/auth/auth.controller.js @@ -4,15 +4,22 @@ const userService = require('../user/user.service'); exports.signUpAndGiveToken = async (req, res) => { try { const { email, password } = req.body; - + const result = await userService.findUserByEmail(email); + if (result != undefined || result != null) { + throw new Error("Already Existing Email"); + } + } catch (error) { + console.error(error); } } exports.loginAndGiveToken = async (req, res) => { try { const email = req.query.email; + console.log(email); const result = await userService.findUserByEmail(email); - const accessToken = jwtController.generateAccessToken(result[0].email); + const { accessToken, refreshToken } = await jwtController.generateTokens(result[0].email); + res.cookie('refreshToken', refreshToken, { httpOnly: true }); res.status(200).json({ accessToken: accessToken }); } catch (error) { console.error('Error occurred while finding user by email:', error); @@ -33,20 +40,24 @@ exports.logoutAndDestroyToken = async (req, res) => { // TODO: next 넣어서 미들웨어로 만들기 exports.checkUserSession = async (req, res) => { try { - const accessToken = req.headers.authorization; + const accessToken = req.headers.Authorization; const refreshToken = extractRefreshTokenFromCookie(req); + console.log("refreshToken: " + refreshToken); const result = await jwtController.validateToken(accessToken, refreshToken); console.log('Successfuly Authenticateed'); res.status(200).json({ email: result.email }); } catch (error) { - res.status(500).json({ error: error }) + res.status(500).json("토큰 없음"); } } // Http Only Cookie에서 RefreshToken을 가져오는 함수 function extractRefreshTokenFromCookie(req) { // TODO: Http Only Cookie에서 RefreshToken을 가져오는 로직을 작성해주세요. - // 쿠키에서 RefreshToken을 추출하고 반환해야 합니다. - return req.cookies.refreshToken; + const refreshToken = req.cookies.refreshToken + if (refreshToken) { + return req.cookies.refreshToken; + } + throw new Error("Refresh Token이 Cookie에 존재하지 않음"); } diff --git a/src/modules/auth/utils/validation.js b/src/modules/auth/utils/validation.js index 1617b10814e252f502aaa74cdd0b00c3c0c40002..073274587407c9da7c97b51dc16c50121b72c034 100644 --- a/src/modules/auth/utils/validation.js +++ b/src/modules/auth/utils/validation.js @@ -1,6 +1,5 @@ const signUpBodyValidation = (email, body) => { return new Promise((resolve, reject) => { - - } - ) + + }); }; \ No newline at end of file