23.3.1 회원가입 구현하기
src/api/auth 디렉터리에 auth.ctrl.js 파일을 만들고 register 함수를 다음과 같이 작성해 보세요.
src/api/auth/auth.ctrl.js
import Joi from 'joi'; import User from '../../models/user'; /* POST /api/auth/register { username: 'velopert', password: 'mypass123' } */ export const register = async ctx => { // Request Body 검증하기 const schema = Joi.object().keys({ username: Joi.string() .alphanum() .min(3) .max(20) .required(), password: Joi.string().required(), }); const result = Joi.validate(ctx.request.body, schema); if (result.error) { ctx.status = 400; ctx.body = result.error; return; } const { username, password } = ctx.request.body; try { // username이 이미 존재하는지 확인 const exists = await User.findByUsername(username); if (exists) { ctx.status = 409; // Conflict return; } const user = new User({ username, }); await user.setPassword(password); // 비밀번호 설정 await user.save(); // 데이터베이스에 저장 // 응답할 데이터에서 hashedPassword 필드 제거 const data = user.toJSON(); delete data.hashedPassword; ctx.body = data; } catch (e) { ctx.throw(500, e); } };