2
我想为我的用户模型创建一个“checkPassword”的方法,但是每当我把它叫做我收到以下错误:猫鼬方法未定义
User.checkPassword(password, hash, function(err, samePassword){
^
TypeError: undefined is not a function
我是很新,猫鼬所以我我不知道我要去哪里错。
users.js(用户模式)
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
bcrypt = require('bcrypt');
var userSchema = new Schema({
email : {type: String, required: true, unique: true},
password : {type: String, required: true},
firstName : {type: String},
lastName : {type: String}
});
userSchema.methods.checkPassword = function checkPassword(password, hash, done){
bcrypt.compare(password, hash, function(err, samePassword) {
if(samePassword === true){
done(null, true);
} else {
done(null, false)
}
});
}
module.exports = mongoose.model('User', userSchema);
passport.js
var passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
mongoose = require('mongoose'),
usersModel = require('../models/users'),
User = mongoose.model('User');
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
}, function(email, password, done){
User.findOne({'email': email}, function(err, user){
if(user){
var hash = user.password;
User.checkPassword(password, hash, function(err, samePassword){
if(samePassword === true){
done(null, user);
}
等。
如果我CONSOLE.LOG用户模型(在护照的开始。 JS),我可以看到该方法在那里,但我无法使用它。我的模型布局与文档中的类似:http://mongoosejs.com/docs/guide.html(实例方法部分)。
感谢这个例子 - 它很容易理解。将其更改为'userSchema.statics.checkPassword'工作。 为什么我想要使用{modelSchema} .methods vs {modelSchema} .statics有偏好吗? –
@AshleyB实例方法用于针对单个文档执行操作。在你的情况下,'checkPassword()'作为一个实例方法是有意义的,因为你有一个你想验证密码的文件('user')。静态方法主要用于与整个模型/集合相关的动作,如查找特定文档(链接的Mongoose文档中的“Animal.findByName()”就是一个很好的例子)。 – robertklep