Skip to content
Snippets Groups Projects
Commit 4121fb56 authored by donghyun's avatar donghyun
Browse files

feat: refreshToken logic and make db query

parent bb097283
Branches
No related tags found
1 merge request!3Anak FEAT Auth Login
......@@ -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) => {
......
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));
......
......@@ -17,10 +17,22 @@ exports.checkRefreshToken = (refreshToken) => {
});
}
exports.insertRefreshToken = (email, refreshToken) => {
return new Promise((resolve, reject) => {
mysql.query('INSERT INTO AUTH (email, refresh_token) VALUES (?, ?);', [email, refreshToken], (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 {
......
......@@ -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을 추출하고 반환해야 합니다.
const refreshToken = req.cookies.refreshToken
if (refreshToken) {
return req.cookies.refreshToken;
}
throw new Error("Refresh Token이 Cookie에 존재하지 않음");
}
const signUpBodyValidation = (email, body) => {
return new Promise((resolve, reject) => {
}
)
});
};
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment