본문 바로가기
더이상 하지 않는 망한 프로젝트/프로젝트 개발 과정

[앱삼] 7. (backend) feature/signUp - userData 받아서 저장하기

by VictorMeredith 2023. 3. 6.

auth.js

const User = require('../models/User');
const bcrypt = require('bcrypt');
const { logEvents } = require('../middleware/logger');

// 해시함수로 암호화하여 스키마 생성 후 저장하는 함수
const createUserData = async ({id, ps, name, email, aors})=>{ 
    try{
        const encryptedPS = await bcrypt.hash(ps[0].toString(),10)
        const user = new User({id:id[0], ps:encryptedPS, name : name[0], email : email[0], aors: aors[0]}); //schema에 집어넣기
        await user.save();
    }
    catch(e){
        throw new Error(e + '생성')
    }
}

//메인 로직
const signUp = async (req, res, next)=>{
    try{
        await User.find({id : req.body['id'][0]}) //db에서 id 중복값 찾기
        .then((result)=>{
            if(result[0]){ //찾은 값이 있으면
                throw new Error('중복값'); //걍 에러 밖에 던져버림
            }
            else{ //중복값이 없으면
                createUserData(req.body); //새 유저 db 생성
                res.status(201).send('생성 success') //성공
            }
        })
    }
    catch(err){ 
        res.status(409).send(err + '에러일걸요?'); //던진 에러 받아서 에러 보내기
        logEvents(`${err}\t${req.url}\t${req.headers.origin}`,'errLog.log') //에러 로그에 기본적인거만 저장
    }
}

module.exports = {signUp};

 

- 테스트!

admin 아무데이터 저장테스트 성공 확인
admin 한번 더 저장하려고 했을 경우 에러 뿜어주는 것 확인

- 중복 값은 저장되지 않는다

- 프론트단에서 아이디 적는 input박스 옆에 중복확인 버튼을 눌러서 따로 로직을 짜놓는 것이 낫다.

- 서버에서 저장하기 직전 처리하는 에러는 의도적으로 헤더를 조작해서 요청하는 공격에 대비해 혹시나 해서 짜 놓은 것.

댓글