Users.js
1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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}