mongodb를 사용하여 내 사용자 테이블을 저장하고 bcrypt를 사용하여 비밀번호를 저장합니다. 그러나 저장된 암호는 모두 실제 텍스트입니다. 내 노드 JS 코드는 다음과 같습니다 : 비밀번호 저장에 bcrypt를 사용하면 아무 효과가 없습니다.
{ "그 이후var mongoose = require('mongoose') var bcrypt = require('bcrypt') var SALT_WORK_FACTOR = 10 var UserSchema = new mongoose.Schema({ name:{ type:String, required: true, unique: true }, password: { type: String, required: true } meta: { createAt: { type: Date, default: Date.now() }, updateAt: { type: Date, default: Date.now() } } }) UserSchema.pre('save',function(next){ var user = this if(this.isNew){ this.meta.createAt = this.meta.updateAt = Date.now() } else{ this.meta.updateAt = Date.now() } bcrypt.genSalt(SALT_WORK_FACTOR,function(err, salt){ if(err) return next(err) console.log('salt'+salt) bcrypt.hash(user.password, salt, function(err, hash){ console.log('hash'+hash) if(err) return next(err) console.log('set user password' + hash) user.password = hash next() }) }) next() })
, 난 내 몽고 터미널에서 db.users.find()를 사용, 내가 보는 모든 실제 텍스트로 저장 암호입니다 _id ": ObjectId ("54d2f5a4162a7335c0036cae "),"이름 ":"12 ","암호 ":"12 ","메타 ": {"updateAt ": ISODate ("2015-02-05T04 : 46 : 28.246Z ") , "createAt": ISODate ("2015-02-05T04 : 46 : 28.246Z"), "__v": 0}
{ "_id": ObjectId ("54d2f89c0675b329c3e783d4"), "name": "34 ","password ":"34 ","meta ": {"updateAt ": ISODate ("2015-02-05T04 : 59 : 08.285Z "), "createAt": ISODate ("2015-02-05T04 : 59 : 08.285Z"), "__v": 0}
{ "_id": ObjectId ("54d2f9703b55cdf5c32af5b2"), "name": "457" , "password": "457", "meta": { "updateAt": ISODate ("2015-02-05T05 : 03 : 23.338Z"), "createAt": ISODate ("2015-02-05T05 : 03 : 23.338 Z ")},"__v는 "0}
때문에 그
, 내 비교 함수는 항상 false를 반환 : 는UserSchema.methods = {
comparePassword: function(_password, cb){
bcrypt.compare(_password, this.password, function(err, isMatched){
if(err)
return cb(err)
cb(null, isMatched)
})
}
}
누군가 나에게이 문제를 해결하는 데 도움 수 있을까요?