在尝试使用有效帐户登录时获取以下错误
if(!user.authenticate(password)){
^
TypeError: undefined is not a function
at Promise.<anonymous> (/home/kj/Desktop/nodejs-exp/MEAN_BOOK/config/strategies/local.js:19:16)
at Promise.<anonymous> (/home/kj/Desktop/nodejs-exp/MEAN_BOOK/node_modules/mongoose/node_modules/mpromise/lib/promise.js:177:8)
at Promise.emit (events.js:107:17)
at Promise.emit (/home/kj/Desktop/nodejs-exp/MEAN_BOOK/node_modules/mongoose/node_modules/mpromise/lib/promise.js:84:38)
at Promise.fulfill (/home/kj/Desktop/nodejs-exp/MEAN_BOOK/node_modules/mongoose/node_modules/mpromise/lib/promise.js:97:20)
at /home/kj/Desktop/nodejs-exp/MEAN_BOOK/node_modules/mongoose/lib/query.js:1406:13
at model.Document.init (/home/kj/Desktop/nodejs-exp/MEAN_BOOK/node_modules/mongoose/lib/document.js:254:11)
at completeOne (/home/kj/Desktop/nodejs-exp/MEAN_BOOK/node_modules/mongoose/lib/query.js:1404:10)
at Immediate.cb (/home/kj/Desktop/nodejs-exp/MEAN_BOOK/node_modules/mongoose/lib/query.js:1158:11)
at Immediate._onImmediate (/home/kj/Desktop/nodejs-exp/MEAN_BOOK/node_modules/mongoose/node_modules/mquery/lib/utils.js:137:16)
at processImmediate [as _immediateCallback] (timers.js:367:17)下面是我的locals.js,它在身份验证期间被调用
module.exports = function(){
passport.use(new LocalStrategy(function(username,password,done){
User.findOne({
username:username
},function(err,user){
if(err){
return done(err);
}
if(!user){
return done(null,false,{
message:'Unknown User'
});
}
if(!user.authenticate(password)){
return done(null,false,{
message:'Invalid password'
});
}
return done(null,user);
});
}));
};还有我的routes.js文件
module.exports = function(app){
app.route('/signup')
.get(users.renderSignup)
.post(users.signup);
app.route('/signin')
.get(users.renderSignin)
.post(passport.authenticate('local',{
successRedirect: '/',
failureRedirect: '/signin',
failureFlash : true
}));
app.get('/signout',users.signout);
};我的用户模型:
var UserSchema = new Schema({
firstName: String,
lastName : String,
email: {
type: String,
match: [/.+\@.+\..+/, "Please fill a valid e-mail address"]
},
username : {
type: String,
trim: true,
required:'Username is required',
unique : true
},
password : {
type:String,
validate:[
function(password){
return password && password.length>6;
},'Password should be longer'
]
},
sale:{
type:String
},
provider:{
type:String,
required:'Provider is required'
},
providerId:String,
providerDate:{},
created : {
type : Date,
default : Date.now
}
});我很习惯这个错误意味着什么。如果您需要进一步的信息来调试这个问题,请告诉我。
发布于 2015-12-16 14:51:05
看起来您的模式缺少一个名为实例法的authenticate()。这不是自动提供的东西,所以您需要自己实现它。
从您的代码来看,它可能很简单:
UserSchema.methods.authenticate = function(password) {
return this.password === password;
};发布于 2015-12-16 14:54:43
你可以简单地:
if(user.password !== password){
return done(null,false,{
message:'Invalid password'
});
}用户模型没有authenticate方法。
https://stackoverflow.com/questions/34314646
复制相似问题