gpt4 book ai didi

Node.js 和 Passport 对象没有方法 validPassword

转载 作者:IT老高 更新时间:2023-10-28 13:08:14 26 4
gpt4 key购买 nike

我正在使用 Node.js + Express + Passport 创建一个简单的身份验证(本地)

到目前为止,当输入错误的用户名或密码时,用户会被重定向到错误页面

但是当用户输入正确的用户名和密码时,我得到了这个错误

node_modules\mongoose\lib\utils.js:435
throw err;
^
TypeError: Object { _id: 50b347decfd61ab9e9e6768f,
username: 'saleh',
password: '123456' } has no method 'validPassword'

我不确定那里出了什么问题

app.js(我删除了不必要的代码):

  var passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;

app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});



var mongoose = require('mongoose');
var db = mongoose.createConnection('localhost', 'authTest');

var authSchema = mongoose.Schema({
username: 'string',
password: 'string'
});

var User = db.model('users', authSchema);


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: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));



passport.serializeUser(function(user, done) {
done(null, user.id);
});

passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});




app.post('/login',
passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login/error',

})
);

现在在 routes/login.js 中

var mongoose = require('mongoose');
var db = mongoose.createConnection('localhost', 'authTest');

var authSchema = mongoose.Schema({
username: 'string',
password: 'string'
});

var User = db.model('users', authSchema);

exports.index = function(req, res){
User.find(function (err, list) {
res.render('login', { title: 'Usernames and Passwords', users: list,msg:""});
});
};

感谢您的宝贵时间。

最佳答案

你正在使用

if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}

但是你还没有定义 validPassword 方法。将其附加到您的架构:

var authSchema = mongoose.Schema({ 
username: 'string',
password: 'string'
});
authSchema.methods.validPassword = function( pwd ) {
// EXAMPLE CODE!
return ( this.password === pwd );
};

EDIT 您还错误地定义了架构。应该是:

var authSchema = mongoose.Schema({ 
username: String,
password: String
});

注意 usernamepassword 都应该是 String 类型的对象,而不是字符串 "string",如果你知道我的意思。 :)

关于Node.js 和 Passport 对象没有方法 validPassword,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13565059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com