我之前已经问过这个问题,但我找不到合适的答案。 这是控制台错误。
TypeError: user.authenticate is not a function
at /home/sinnedde/WebstormProjects/web-services/config/strategies/local.js:24:23
这是local.js,用于检查用户名和密码是否正确。
var passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
User = require('mongoose').model('User');
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: 'Invalid Username or Password'
});
}
if (!user.authenticate(password)) {
return done(null, false, {
message: 'Invalid Username or Password'
});
}
return done(null, user);
});
}));
};
这是控制器中的signin方法。
exports.signin = function (req, res, next) {
passport.authenticate('local', function (err, user, info) {
if (err || !user) {
res.send(info);
} else {
res.json({
status: 'true',
message: 'Logged In'
});
}
})(req, res, next);
};
我是通过邮递员发送请求的。如果用户名无效,我会收到正确的回复,但如果密码无效,则会引发错误。我不知道什么是错的。请帮忙。
答案 0 :(得分:2)
您的Mongoose模型没有身份验证方法,但您可以将其添加到架构中。
示例代码:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var UserSchema = new Schema ({
...
});
UserSchema.methods.authenticate = function(password) {
//implementation code goes here
}
mongoose.model('User', UserSchema);
module.exports = mongoose.model('User');
或者您可以使用Mongoose passport plugin
答案 1 :(得分:1)
我得到了同样的错误。在我的情况下,我忘记添加userSchema.plugin(passportLocalMongoose);
并且不要忘记npm install
passport-local-mongoose
包。我希望这能帮到您。感谢
答案 2 :(得分:0)
就像“ Hya”所说的
您的Mongoose模型没有验证方法,但是您可以将其添加到架构中。
示例代码:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var UserSchema = new Schema ({
...
});
// function should be like this to match encrypted password
UserSchema.methods.authenticate = function(password) {
return this.password === this.hashPassword(password);
}
## OR ##
// if you are not using any encryption in password code then function should be like this
UserSchema.methods.authenticate = function(password) {
return this.password === password;
}
mongoose.model('User', UserSchema);
module.exports = mongoose.model('User');