Skip to content
Snippets Groups Projects
Commit 5db16f43 authored by donghyun's avatar donghyun
Browse files

Merge branch 'anak' into 'main'

Anak FEAT Auth Login

See merge request !3
parents 97030b33 88b1f0a5
No related branches found
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 (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 {
......
......@@ -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