본문 바로가기
공부/nodejs

로그인

by 매일삼겹살 2021. 6. 13.
반응형
 

jsonwebtoken

JSON Web Token implementation (symmetric and asymmetric)

www.npmjs.com

 jsonwebtoken 사용방법이 나와 있음

 

const cookieParser = require('cookie-parser')

app.use(cookieParser())//쿠키 사용

app.post('/login', (req, res) => {
  //요청된 이메일을 데이터베이스에서 있는 지 찾는다.
  User.findOne({ email: req.body.email }, (err, user) => {//몽고디비에서 제공하는 메서드
    if(!user){
      return res.json({
        loginSuccess: false,
        message: '제공된 이메일에 해당하는 유저가 없습니다.'
      })
    }

  //요청된 이메일이 데이터베이스에 있다면 비밀번호가 맞는 비밀번호인지 비교
    user.comparePassword(req.body.password, (err, isMatch) => {
      if(!isMatch)
        return res.json({ loginSuccess: false, message: "비밀번호가 틀렸습니다." })

      //비밀번호 까지 맞다면 토큰을 생성한다. npm install jsonwebtoken --save
      //npmjs.com/package/jsonwebtoken
      user.generateToken((err, user) => {
        if(err) return res.status(400).send(err)
        
        // 토큰을 저장한다. 어디에? 쿠키, 로컬 스토리지, 세션 스토리지 
        // 어디가 안전한지는 논란이 있다. 
        // 쿠키 사용 시 npm install cookie-parser --save
        res.cookie('x_auth', user.token)
        .status(200) // 성공
        .json({ 
          loginSuccess: true, 
          userId: user._id 
        })
      })
    })
  })
})
const jwt = require('jsonwebtoken')

userSchema.methods.comparePassword = function(plainPassword, callback){
    //plainPassword 1234567 암호화된 비밀번호 ~~
    //1234567도 암호화해서 비교해야 한다. 암호화된 비밀번호를 복호화 할 수는 없다.

    bcrypt.compare(plainPassword, this.password, function(err, isMatch){
        if(err) return callback(err)
            callback(null, isMatch)
    })
}

userSchema.methods.generateToken = function(callback){
    // jsonwebtoken을 이용해서 token 생성하기
    var user = this
    var token = jwt.sign(user._id.toHexString(), 'secretToken') //이름은 아무렇게나 정해도 됨

    user.token = token
    user.save(function(err, user){
        if(err) return callback(err)
        callback(null, user)
    })
}

 

 

포스트맨 테스트

 

주의 Json으로 바꾸는 거 잊으면 안됨

 

 

728x90

'공부 > nodejs' 카테고리의 다른 글

로그아웃  (0) 2021.06.14
Auth 기능  (0) 2021.06.13
비밀번호 암호화 하기 Bcrypt  (0) 2021.06.13
비밀 설정 정보 관리  (0) 2021.06.13
nodemon  (0) 2021.06.12

댓글