//- 보안을 위해 비밀번호는 평문(Plain Text)으로 저장하지 않고 Hash 된 값을 저장합니다.
const hashedPassword = await bcrypt.hash(password, 10);
const hashedConfirm = await bcrypt.hash(password, 10);
await prisma.users.create({
data: {
email,
password: hashedPassword,
confirm: hashedConfirm,
name,
grade,
},
});
}
bcrypt
패키지를 사용하여 비밀번호를 10 복잡도로 hash.
// 3. 로그인 성공 시, JWT AccessToken을 생성하여 반환합니다.
// - Access Token
// - Payload: userId를 담고 있습니다.
// - 유효기한: 12시간
// user가 가지고 잇는 id로 jwt 토큰 발급
const accessToken = jwt.sign({ userId: user.userId },
process.env.ACCESS_TOKEN_SECRET_KEY, { expiresIn: "12h" });
const refreshToken = jwt.sign({ userId: user.userId },
process.env.REFRESH_TOKEN_SECRET_KEY, { expiresIn: "7d" });
jsonwebtoken
패키지의 sign을 사용하여 토큰 발급.
첫 번째 인자로 토큰에 담을 JSON 데이터(payload) 두 번째 인자로는 키(key)
// - 이력서 목록은 QueryString으로 order 데이터를 받아서 정렬 방식을 결정합니다.
// - orderKey, orderValue 를 넘겨받습니다.
// - orderValue에 들어올 수 있는 값은 ASC, DESC 두가지 값으로 대소문자 구분을 하지 않습니다.
// - ASC는 과거순, DESC는 최신순 그리고 둘 다 해당하지 않거나 값이 없는 경우에는 최신순 정렬을 합니다.
// - 예시 데이터 : orderKey=userId&orderValue=desc
const orderkey = req.query.orderkey;
const orderValue = req.query.orderValue;
막연하게 오더키를 받아와 주소창에서 사용할 생각이었으나 무언가 이상했다. 요구사항에 맞는 대소문자 여부와 정렬은 전혀 되지 않았다.
// req.query.orderkey가 값이 없다면 resumeId을 orderKey에 넣기
const orderKey = req.query.orderKey ?? "resumeId";
// req.query.orderValue가 값이 없다면 desc
const orderValue = req.query.orderValue ?? "desc";
select: {
// ...
},
// orderBy 객체를 이용하여 정렬 수행
orderBy: [
{
[orderKey]: orderValue.toLowerCase(),
},
],
});
null 병합 연산자로 쿼리가 비었을 때 넣을 값을 넣어주면 되었다.