Commit 775d915f authored by Yoon, Daeki's avatar Yoon, Daeki 😅
Browse files

비밀번호 암호화를 db쪽에서 처리하는 것으로 변경

parent 00ee89c5
...@@ -25,15 +25,17 @@ export const login = asyncWrap(async (req, res) => { ...@@ -25,15 +25,17 @@ export const login = asyncWrap(async (req, res) => {
return res.status(401).send("잘못된 비밀번호를 입력하셨습니다"); return res.status(401).send("잘못된 비밀번호를 입력하셨습니다");
} }
// 3) 비밀번호가 맞으면 토큰 생성 // 3) 비밀번호가 맞으면 토큰 생성
const token = jwt.sign({ userId: user.id }, jwtCofig.secret, { //userId를 토큰에다 넣는 중. const token = jwt.sign({ userId: user.id }, jwtCofig.secret, {
//userId를 토큰에다 넣는 중.
expiresIn: jwtCofig.expires, expiresIn: jwtCofig.expires,
}); });
// 4) 토큰을 쿠키에 저장 // 4) 토큰을 쿠키에 저장
res.cookie(cookieConfig.name, token, {//token은 쿠키에 무엇을 실렸는가 이다. 항상 갖고 있다가 홈페이지 들어가면 서버로 접속 res.cookie(cookieConfig.name, token, {
maxAge: cookieConfig.maxAge,// 이 기간 한에서만 유효 //token은 쿠키에 무엇을 실렸는가 이다. 항상 갖고 있다가 홈페이지 들어가면 서버로 접속
path: "/",//어떠한 경로에 관해서만 쓴다. 지금은 전부에 쓴다. maxAge: cookieConfig.maxAge, // 이 기간 내에서만 유효
httpOnly: envConfig.mode === "production", //false 면 브라우저에서 쿠키를 조작, true면 조작할 수 있다. path: "/", //어떠한 경로에 관해서만 쓴다. 지금은 전부에 쓴다.
secure: envConfig.mode === "production", //true 면 https 를 통해서만 쿠키 전달, false면 httpOnly: envConfig.mode === "production", //false면 브라우저에서 쿠키를 조작, true면 조작할 수 없다.
secure: envConfig.mode === "production", //true 면 https를 통해서만 쿠키 전달, false면
}); });
// 5) 사용자 반환 // 5) 사용자 반환
res.json({ res.json({
...@@ -59,7 +61,7 @@ export const requireLogin = asyncWrap(async (reqExp, res, next) => { ...@@ -59,7 +61,7 @@ export const requireLogin = asyncWrap(async (reqExp, res, next) => {
const decodedUser = jwt.verify(token, jwtCofig.secret); // 아까보낸 토근을 디코딩중. const decodedUser = jwt.verify(token, jwtCofig.secret); // 아까보낸 토근을 디코딩중.
// 3) 요청 객체에 토큰 사용자 객체 추가 // 3) 요청 객체에 토큰 사용자 객체 추가
req.auth = decodedUser; req.auth = decodedUser;
next();// 에러가 안나오면 next 사용, 나오면 catch쪽으로. next(); // 에러가 안나오면 next 사용, 나오면 catch쪽으로.
} catch (error) { } catch (error) {
res.clearCookie(cookieConfig.name); res.clearCookie(cookieConfig.name);
console.log("error in requreLogin===\n", error); console.log("error in requreLogin===\n", error);
...@@ -84,13 +86,12 @@ export const signup = asyncWrap(async (req, res) => { ...@@ -84,13 +86,12 @@ export const signup = asyncWrap(async (req, res) => {
if (userExist) { if (userExist) {
return res.status(422).send(`${email} 사용자가 이미 존재합니다`); return res.status(422).send(`${email} 사용자가 이미 존재합니다`);
} }
// 3) 비밀번호 암호화 // 3) 비밀번호 암호화는 useDb.createUser에서 처리
const hash = await bcrypt.hash(password, 10);
// 4) 새로운 사용자 만들기 // 4) 새로운 사용자 만들기
const newUser = await userDb.createUser({ const newUser = await userDb.createUser({
email, email,
password: hash, password,
}); });
// 5) 사용자 반환 // 5) 사용자 반환(내부적으로 몽구스가 toJSON() 호출)
res.json(newUser); res.json(newUser);
}); });
import bcrypt from "bcryptjs";
import { IUser, User } from "../models"; import { IUser, User } from "../models";
export const createUser = async (user: IUser) => { export const createUser = async (user: IUser) => {
const newUser = await User.create(user); // 비밀번호 암호화
const hash = await bcrypt.hash(user.password, 10);
const newUser = await User.create({ email: user.email, password: hash });
return newUser; return newUser;
}; };
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment