[Inflearn][JohnAhn] 노드 리액트 기초 (13~14)

ann·2023년 11월 2일
0
middleware/auth.js========================
const { User } = require('../models/User')

let auth = (req, res, next) => {
    let token = req.cookies.x_auth
    
    User
    .findByToken(token)
    .then(user => {
        if (!user) return res.json({ isAuth: false, error: true })
        req.token = token
        req.user = user
        next()
    })
    .catch(err => {
        throw err
    })
}

module.exports = { auth }
  • callback함수 없이 then과 catch를 사용
models/User.js====================================
userSchema.statics.findByToken = function(token) {
    var user = this;

    return new Promise((resolve, reject) => {
        jwt.verify(token, 'secretToken',(err, decoded) => {인
            if (err) {
                reject(err);
            }
            user
            .findOne({"_id" : decoded, "token" : token})
            .then(user => {
                if (!user) {reject('User not found')}
                resolve(user)
            })    
            .catch(err => {
                reject(err)
            })
        })
    })
}

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

0개의 댓글

Powered by GraphCDN, the GraphQL CDN