포시코딩

Node.js, MongoDB 로 웹서비스 만들기 - 9. 회원가입(1) - INSERT 본문

Node.js

Node.js, MongoDB 로 웹서비스 만들기 - 9. 회원가입(1) - INSERT

포시 2022. 6. 10. 15:50
728x90

전달 받은 값을 DB 에 저장해보자

router.post('/register', (req, res)=>{
    console.log('in register post');

    let id = req.body.id;
    let pw = req.body.pw;

    db.collection('login').insertOne({id: id, pw: pw}, (error, result)=>{
        res.status(200).send({message: 'ajax 통신 성공 - id: ' + id + ', pw: ' + pw});
    })
})

login 콜렉션 안에 insertOne 을 통해 id 와 pw 값을 집어넣는 코드

 

 

성공일 경우 error 값이 undefined 가 되고 result 값이 리턴, 실패일 경우는 그 반대로 리턴된다. 

테스트 ㄱㄱ

_id 는 해당 데이터의 고유 값

잘들어옴

 

 

하지만 이대로면 똑같은 아이디로 계속 가입할 수 있다. 

insert 하기전에 먼저 id 값으로 데이터를 찾아보고 없으면 저장시켜주도록 하자

db.collection('login').findOne({id: id}, (error, result)=>{
    if(result) {
        res.send({code: 0});  // 아이디중복, 가입실패
    } else {
        db.collection('login').insertOne({id: id, pw: pw}, (error, result)=>{
            res.send({code: 1});  // 가입성공
        })
    }
})

result 값이 있으면 중복인거임

 

status 리턴은 의미 없는거 같아서 뺐고

message 도 만약에 바꾸게 될 경우 프론트 쪽에서 수정하는게 나아보여서 

code 라는 값으로 결과를 전달해주기로 함

$('#register').click(()=>{
    const id = $('#id').val();
    const pw = $('#pw').val();

    $.ajax({
      url: '/member/register', 
      method: 'POST', 
      data: {id: id, pw: pw}, 
    }).done((result)=>{
      if(result.code == 1) {
        alert(id + ' 님 환영합니다!');
        location.href = '/member/login';
      } else {
        alert('이미 가입된 아이디입니다.');
        $('#id').focus();
      }
    })
  })

성공시 로그인 페이지로 가는 코드와 

실패시 아이디 input 값에 focus 를 주는것까지 추가했음

 

 

근데 비밀번호 이렇게 그대로 저장하는 사람 없음. 

비밀번호 암호화 하는법을 알아보자

 

 

 

 

https://4sii.tistory.com/17

 

Node.js, MongoDB 로 웹서비스 만들기 - 10. 회원가입(2) - bcrypt 암호화

최근 현업쪽에서 bcrypt 를 많이 쓴다고 한다. 좀 살펴봤더니 귀찮게 salt 생성하고 같이 저장하는 방식이 아니라 한번 써볼거임 일단 bcrypt 라이브러리를 사용할 수 있게 터미널을 통해 설치한다. n

4sii.tistory.com

728x90