본문 바로가기
웹개발/Node.js

[Node.js] 회원가입, 회원기능 만들기

by 철없는민물장어 2023. 2. 25.
728x90
반응형

저번에 로그인기능을 만든 것에 이어,

조금의 응용을 더하여 회원가입과 회원기능(글 쓴 사람만 글 삭제 가능 등)을 만들어보자.

 

app.post('/register',function(요청,응답){
    db.collection('login').findOne({id:요청.body},function(에러,결과){
        if(결과!=null){
            응답.send('이미 존재하는 아이디입니다')
            console.log(결과);
        }else{
            //아이디 생성
            db.collection('login').insertOne({id:요청.body.id,pw:요청.body.pw},function(에러,결과){
                응답.redirect('/');
            })
        }
    })
    
})

회원가입은 간단하게 만들었다.

id중복이 있는지만 체크한 후 바로 아이디가 만들어지게 했다.

 

우선 회원가입 페이지를 따로 만든 후, 폼 전송시 /register로 post요청을 하도록 했다.

이후, db에서 해당 id가 존재하는지 확인하고, 

존재하지 않다면 db에 요청으로 들어온 값들을 추가하고, 홈으로 이동하게 했다.

 


현재 로그인한 유저의 정보가 req.user에 들어있으니 이를 이용하면 아주 간단하게 회원정보를 사용할 수 있다.

 

app.post('/add', function (req, res) {

    res.send('전송완료')
    //console.log(req.body.title)
    db.collection('counter').findOne({ 'name': '게시물개수' }, function (에러, 결과) {
        //name이 게시물개수인 데이터를 찾음(카운터 사용)

        var 게시물개수 = 결과.totalPost;
        var 저장할거 = { _id: 게시물개수 + 1, 'title': req.body.title, 'date': req.body.date , 'writer':req.user.id }
        db.collection('post').insertOne(저장할거, function (에러, 결과) {
            console.log('저장완');
            //db에 데이터를 저장하고
            db.collection('counter').updateOne({ 'name': '게시물개수' }, { $inc: { 'totalPost': 1 } }, function (에러, 결과) {
                //db의 counter에 있는 totalPost값을 1 증가시킴


            });


        })
    });

})

게시물을 작성한 사람만 삭제 또는 수정이 가능토록 하기위해서

글 작성시에 작성자를 db에 저장하게 했다.

기존에 작성해두었던 app.post('/add',...)를 조금 손봤다.

아주 간단하게, 저장할 데이터에 {'writer': req.user._id} 를 추가해주었다.


app.delete('/delete', function (요청, 응답) {
    // console.log(요청.body);
    요청.body._id = parseInt(요청.body._id); //문자형태로 넘어온 id값을 다시 int형으로 변환
    
    var 삭제할데이터 = {_id: 요청.body._id, writer: 요청.user._id} //삭제할 데이터에 작성자정보를 추가
    db.collection('post').deleteOne(삭제할데이터, function (에러, 결과) {
        // console.log('삭제완료');
        if(에러){console.log(에러)}
        응답.status(200).send({ message: '성공했습니다' });
    })
})

삭제의 경우에는

기존에는 글번호를 이용해서 삭제할 글을 찾아 db에서 삭제했다.

이제 글 쓴 사람만 삭제가 가능하게 하기 위해서

삭제할 데이터를 찾을 때 

글 번호가 요청.body_id이고, 작성자가 요청.user_id인 데이터를 찾도록 했다.

그럼 현재 유저가 해당 글의 작성자와 일치하지 않으면 db에서 조건을 만족하는 글을 찾지 못해 글을 삭제하지 못한다.

728x90
반응형

댓글