編集:console.log(this)
がsetPassword
メソッド内で実行されたことにより、ハッシュと塩だけが返されることがわかりました。なぜこれが起こっているのかわかりませんが、それはthis
がモデルを参照していないことを示しています。Mongooseインスタンスメソッド `this`はモデルを参照していません
私は、次のインスタンスメソッドでは、次のスキーマを持っている:
let userSchema = new mongoose.Schema({
username: {type: String, required: true},
email: {type: String, required: true, index: {unique: true}},
joinDate: {type: Date, default: Date.now},
clips: [clipSchema],
hash: {type: String},
salt: {type: String}
})
userSchema.methods.setPassword = (password) => {
this.salt = crypto.randomBytes(32).toString('hex')
this.hash = crypto.pbkdf2Sync(password, this.salt, 100000, 512, 'sha512').toString('hex')
}
インスタンスメソッドは、ユーザーが保存され、ここで呼び出されます。
let user = new User()
user.username = req.body.username
user.email = req.body.email
user.setPassword(req.body.password)
user.save((err) => {
if (err) {
sendJsonResponse(res, 404, err)
} else {
let token = user.generateJwt()
sendJsonResponse(res, 200, { 'token': token })
}
})
しかし、私が見たときにmongo CLIのusers
コレクションには、hash
またはsalt
の記載はありません。
{
"_id" : ObjectId("576338b363bb7df7024c044b"),
"email" : "[email protected]",
"username" : "Bob",
"clips" : [ ],
"joinDate" : ISODate("2016-06-16T23:39:31.825Z"),
"__v" : 0
}
userSchema.methods.setPassword =機能(パスワード) '使用してみてください{...}' – Kairat