import Joi from 'joi';
import { MESSAGES } from '../../constants/message.constant.js';
import { MIN_PASSWORD_LENGTH } from '../../constants/auth.constant.js';
// 조이 오브젝트라는 메서드 이용해서 이메일과 비밀번호, 비밀번호확인, 이름을 검증할 스키마를 만든다.
const schema = Joi.object({
email: Joi.string().email().required().messages({
'any.required': MESSAGES.AUTH.COMMON.EMAIL.REQUIRED,
'string.email': MESSAGES.AUTH.COMMON.EMAIL.INVALID_FORMAT,
}),
password: Joi.string().required().min(MIN_PASSWORD_LENGTH).messages({
'any.required': MESSAGES.AUTH.COMMON.PASSWORD.REQURIED,
'string.min': MESSAGES.AUTH.COMMON.PASSWORD.MIN_LENGTH,
}),
passwordConfirm: Joi.string().required().valid(Joi.ref('password')).messages({
'any.required': MESSAGES.AUTH.COMMON.PASSWORD_CONFIRM.REQURIED,
'any.only': MESSAGES.AUTH.COMMON.PASSWORD_CONFIRM.NOT_MACHTED_WITH_PASSWORD,
}),
name: Joi.string().required().messages({
'any.required': MESSAGES.AUTH.COMMON.NAME.REQURIED,
}),
});
// signUpValidator 를 진짜로 실행할 수 있는 벨리데이트 함수를 만들었다.
export const signUpValidator = async (req, res, next) => {
try {
await schema.validateAsync(req.body);
next();
} catch (error) {
next(error);
}
};
오늘은 Joi 라이브러리를 사용하여 회원가입 요청에서 입력받은 데이터를 검증하는 코드를 작성했습니다. 주요 내용은 아래와 같습니다.
Joi 객체를 활용한 스키마 정의스키마 세부사항:
email)string.email), 필수 항목입니다(any.required).MESSAGES.AUTH.COMMON.EMAIL.REQUIREDMESSAGES.AUTH.COMMON.EMAIL.INVALID_FORMATpassword)min(MIN_PASSWORD_LENGTH))을 만족해야 하며 필수 항목입니다.MESSAGES.AUTH.COMMON.PASSWORD.REQURIEDMESSAGES.AUTH.COMMON.PASSWORD.MIN_LENGTHpasswordConfirm)password와 동일해야 하며(valid(Joi.ref('password'))), 필수 항목입니다.MESSAGES.AUTH.COMMON.PASSWORD_CONFIRM.REQURIEDMESSAGES.AUTH.COMMON.PASSWORD_CONFIRM.NOT_MACHTED_WITH_PASSWORDname)MESSAGES.AUTH.COMMON.NAME.REQURIEDsignUpValidatorschema.validateAsync 메서드를 사용해 req.body 데이터를 검증합니다.next()를 호출해 다음 미들웨어로 넘어갑니다.error를 next(error)로 전달하여 에러 핸들링 미들웨어에서 처리할 수 있도록 합니다.Joi는 데이터 검증을 간결하고 효과적으로 처리할 수 있는 도구입니다.validateAsync를 활용하면 비동기적으로 검증이 이루어지므로 비동기 환경에서도 활용하기 적합합니다.이 코드는 회원가입 입력값 검증과 관련된 서버의 안정성과 사용자 경험 향상에 큰 기여를 할 수 있다고 생각합니다.
import Joi from 'joi';
import { MESSAGES } from '../../constants/message.constant.js';
// 조이 오브젝트라는 메서드 이용해서 이메일과 비밀번호를 검증할 스키마를 만든다.
const schema = Joi.object({
email: Joi.string().email().required().messages({
'any.required': MESSAGES.AUTH.COMMON.EMAIL.REQUIRED,
'string.email': MESSAGES.AUTH.COMMON.EMAIL.INVALID_FORMAT,
}),
password: Joi.string().required().messages({
'any.required': MESSAGES.AUTH.COMMON.PASSWORD.REQURIED,
}),
});
// signInValidator 를 진짜로 실행할 수 있는 벨리데이트 함수를 만들었다.
export const signInValidator = async (req, res, next) => {
try {
await schema.validateAsync(req.body);
next();
} catch (error) {
next(error);
}
};
오늘은 Joi 라이브러리를 사용하여 로그인 요청에서 입력받은 데이터를 검증하는 코드를 작성했습니다. 주요 내용은 아래와 같습니다.
Joi 객체를 활용한 스키마 정의스키마 세부사항:
email)string.email), 필수 항목입니다(any.required).MESSAGES.AUTH.COMMON.EMAIL.REQUIREDMESSAGES.AUTH.COMMON.EMAIL.INVALID_FORMATpassword)any.required).MESSAGES.AUTH.COMMON.PASSWORD.REQURIEDsignInValidatorschema.validateAsync:req.body) 데이터를 비동기적으로 검증합니다.next()를 호출해 다음 미들웨어로 넘어갑니다.error 객체를 next(error)로 전달하여 에러를 처리할 수 있도록 합니다.Joi를 활용하면 입력값 검증 로직을 간결하게 작성할 수 있습니다.이 코드는 로그인 요청 데이터의 유효성을 보장하여 서버의 안정성을 높이고, 사용자 입력값 오류에 대해 명확한 피드백을 제공할 수 있도록 설계되었습니다.