본문 바로가기
BE/Node.js

[Node.js] Node.js 복습 2

by 백승전 2021. 7. 29.

 

알림

 

본 포스팅은 공부 목적으로 작성된 글이며 상업적 목적으로 절대 사용되지 않았음을 밝힙니다.

 

회원가입 하기

 

app.post('/api/users/register', (req, res) => {
  // 회원 가입 할 때 필요한 정보들을 client에서 가져오면 그것들을 데이터 베이스에 넣어줌

  const user = new User(req.body);

  user.save((err, userInfo) => {
    if (err) return res.json({success : false, err})
    return res.status(200).json({
      success : true
    })
  })
})

 

postman 회원가입

 

이메일은 test@naver.com, 비밀번호는 1234567로 회원가입을 진행했습니다.

 

비밀번호 암호화

 

npm install bcrypt --save
# bcrypt를 설치

 

postman

 

password 암호화

 

mongoDB에서 확인해 보면, 비밀번호가 암호화 된 것을 확인하실 수 있습니다.

 

npm install jsonwebtoken --save
# jsonwebtoken 설치

 

npm install cookie-parser --save
# cookie-parser 설치

 

로그인

 

app.post('/api/users/login', (req, res) => {


  // 1. 데이터베이스 안에서 요청된 이메일 찾기
  User.findOne({ email: req.body.email }, (err, user) => {
    if(!user) {
      return res.json({
        loginSuccess: false,
        message: "가입 안 된 사용자로 확인됩니다."
      })
    }
  // 2. 요청된 이메일이 데이터베이스에 있다면 비밀번호가 맞는지 확인하기

  user.comparePassword(req.body.password, (err, isMatch) => {
    if(!isMatch) // isMatch가 없다면 비밀번호가 같지 않다는 거니까
    return res.json({loginSuccess: false, message: "비밀번호가 틀렸습니다."})

  // 3. 비밀번호까지 맞다면 토큰 생성
    user.generateToken((err, user) => {
      if(err) return res.status(400).send(err);
      
      // 토큰을 저장한다. 어디에? 쿠키, 로컬스토리지
      res.cookie("x_auth", user.token)
      .status(200) // 200 성공 400 실패
      .json({loginSuccess: true, userId: user._id})
      })
    })
  })
})

 

postman

로그인이 성공적으로 완료되었고,

 

mongoDB token

 

로그인이 되어 토큰이 생긴 것도 확인할 수 있습니다.

 

로그아웃

 

app.get('/api/users/logout', auth, (req, res) => {
  User.findOneAndUpdate({_id: req.user._id},
    { token: ""}
    ,(err, user) => {
      if (err) return res.json({ success: false, err})
      return res.status(200).send({
        success:true
      })
    })
})

 

 

mongoDB

 

token이 사라진 것을 확인할 수 있습니다.(= 로그아웃 완료)

'BE > Node.js' 카테고리의 다른 글

[Node.js] Node.js 설치 및 환경 세팅 + 복습  (0) 2021.07.27

댓글