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};
- 테스트!
- 중복 값은 저장되지 않는다
- 프론트단에서 아이디 적는 input박스 옆에 중복확인 버튼을 눌러서 따로 로직을 짜놓는 것이 낫다.
- 서버에서 저장하기 직전 처리하는 에러는 의도적으로 헤더를 조작해서 요청하는 공격에 대비해 혹시나 해서 짜 놓은 것.
'더이상 하지 않는 망한 프로젝트 > 프로젝트 개발 과정' 카테고리의 다른 글
[앱삼] 9. (fullStack) Cookie-based JWT 회원 인증 구현하기 -1 (로그인 중복확인) (0) | 2023.03.08 |
---|---|
[앱삼] 8. (fullStack) feature/signUp - validation (0) | 2023.03.08 |
[앱삼] 6. (frontend) Sign up 페이지 세팅 및 validation (0) | 2023.03.06 |
[앱삼] 5. (frontend) React Router 세팅, 페이지 만들어놓기 (0) | 2023.03.03 |
[앱삼] 4. (frontend) Redux-toolkit 구조 세팅 (0) | 2023.03.02 |
댓글