Pasaporte: estrategia de autentificación desconocida “local”

Soy nuevo en NodeJS e bash crear un sistema de inicio de sesión / registro. El registro funciona bien, pero actualmente no puedo iniciar sesión.

Encuentro una aplicación de ejemplo con pasaporte y nodejs, así que en base a este ejemplo, compilo el formulario de registro y el formulario de inicio de sesión. http://blog.robertonodi.me/node-authentication-series-email-and-password/

Cuando bash iniciar sesión 'Unknown authentication strategy "local" error' . ¿Alguien puede explicar lo que estoy haciendo mal?

Mi código

(Editar: agregó algunos cambios de respuestas / comentarios y nombres de archivos)

Configuración expresa (config / express.config.js)

 app.use(session({ store: new MongoStore({ url: 'mongodb://' + config.url + ':' + config.port + '/' + config.name }), secret: 'secretkey', key: 'skey.sid', resave: false, saveUninitialized: false, cookie : { maxAge: 604800000 //7 days in miliseconds } })); app.use(passport.initialize()); app.use(passport.session()); require(path.join(__dirname, 'auth.config'))(passport); //Load passport config app.use(function(req, res, next) { req.resources = req.resources || {}; // res.locals.app = config.app; res.locals.currentUser = req.user; res.locals._t = function (value) { return value; }; res.locals._s = function (obj) { return JSON.stringify(obj); }; next(); }) 

Configuración de pasaporte (config / auth.config.js)

 var path = require('path'); var passport=require('passport'); var User = require(path.join(__dirname, '..', 'models', 'user.model')); module.exports = function(passport) { passport.serializeUser(function(user, done){ done(null, false); }); passport.deserializeUser(function(id, done){ console.log("deserializeUser called", id); User.findById(id, function (err, user) { done(err, user); }); }); //load strategy files require(path.join(__dirname, 'strategies', 'local-strategy')); //TODO: Facebook //TODO: Twitter //TODO: Google } 

Estrategia local (/config/strategies/local-strategy.js)

 var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; var mongoose = require('mongoose'); var User = mongoose.model('User'); module.exports = function () { console.log("LocalStrategy called"); passport.use(new LocalStrategy({ usernameField : 'username', passwordField : 'password' }, function(username, password, done) { User.authenticate(username, password, function(err, user) { if (err) { return done(err); } if(!user) { return done(null, false, {message: 'Invalid username or password'}); } return done(null, user); }) })) } 

Auth Controller (solo inicio de sesión) (/controllers/auth.controller.js)

 module.exports.loginUser = function(req,res, next) { console.log("Auth.config", path.join(__dirname, 'strategies', 'local-strategy')) passport.authenticate('local', function (err, user, info) { if (err || !user) { console.log("Error", info); return res.status(400).send(info); } req.logIn(user, function(err) { if (err) { return next(err); // return res.status(404).send("Username or password incorrect"); } }) res.status(200).json(user); })(req, res, next); } 

Olvidó importar el archivo de configuración de pasaporte en su app.js

import passport config después de inicializar el passport .

 app.use(passport.initialize()); app.use(passport.session()); // Add the line below, which you're missing: require('./path/to/passport/config/file')(passport); 

Espero que esto ayude.

Lo he hecho así y funcionó.

$ npm instalar el pasaporte local

 var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; /* this should be after passport*/ 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); }); } ));