S'il vous plaît noter que je suis un débutant en Node.js donc s'il vous plaît soyez patient avec moi :)Node.js et Passport objet n'a pas de méthode validPassword
J'utilise Node.js + Express 3 + Passeport pour créer une authentification simple (locale) juste pour jouer
et ce que je suis arrivé à ce jour que lorsqu'un mauvais nom d'utilisateur ou mot de passe saisi par l'utilisateur est redirigé vers une page d'erreur
mais lorsque l'utilisateur entre un bon nom d'utilisateur et mot de passe Je reçois cette erreur
node_modules\mongoose\lib\utils.js:435
throw err;
^
TypeError: Object { _id: 50b347decfd61ab9e9e6768f,
username: 'saleh',
password: '123456' } has no method 'validPassword'
Je ne suis pas sûr de ce qui ne va pas là-bas
app.js (j'ai supprimé le code inutile):
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',
})
);
et maintenant dans les 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:""});
});
};
Merci pour votre temps.
Merci :) il travaille maintenant –
Une autre question si vous pouvez .. Pouvez-vous me recommander un livre ou d'une ressource pour apprendre Node.js mieux? –
@MuhammadSaleh Je ne connais pas de livre Node.JS. J'ai tout appris en continuant à googler. Commencez par le didacticiel sur [page principale Node.JS] (http://nodejs.org/). Et puis juste google. Stackoverflow est aussi une excellente source de connaissances. C'est comme ça que je l'ai appris. – freakish