Users.js 1.81 KB
const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const saltRounds = 10;
const jwt = require('jsonwebtoken');
const userSchema = mongoose.Schema({
    name : {
        type : String,
        maxlength : 50
    },
    email :{
        type : String,
        trim : true, // trim은 이메일 주소 받을때 공백을 없애준다.
        unique : 1 // 중복 허용 안함
    },
    password :{
        type : String,
        maxlength : 50
    },
    lastname:{
        type : String,
        maxlength : 50
    },
    role:{
        type : Number, // 1 : admin, 0 : common user
        default : 0
    },
    image: String,
    token: {
        type : String
    },
    tokenExp :{
        type: Number
    }

})

// password 암호화
userSchema.pre('save', function(next){
    var user = this;

    if(user.isModified('password')){

        bcrypt.genSalt(saltRounds, function(err, salt){
            if(err)return next(err)

            bcrypt.hash(user.password, salt, function(err, hash){
                if(err) return next(err)
                user.password = hash
                //hash 값으로 변경해서 저장
                next()
            })
        })
    } else{
        next() // 비밀번호를 바꾸는 것이 아니라면, 넘어감
    }

})

userSchema.methods.comparePassword = function(plainPassword, cb){
    bcrypt.compare(plainPassword, this.password, function(err, isMatch){
        if(err) return cb(err),
            cb(null, isMatch) 
    })
}
userSchema.methods.generateToken = function(cb){
    // token생성
    var user = this;
    var token = jwt.sign(user._id, 'secretToken')
    user.token = token
    user.save(function(err, user){
        if(err) return cb(err)
        cb(null, user)
    })


    

}


const User = mongoose.model('Users', userSchema)



module.exports = {User}