title: Passport: Unknown authentication strategy "local"
body: <p>I'm new to NodeJS and I try to build a login/registration system. Registration works fine but I'm currently unable to login.</p>
  
  <p>I find a example app using passport and nodejs, so based on this example I build the registration form and the login form. 
  <a href="http://blog.robertonodi.me/node-authentication-series-email-and-password/" rel="noreferrer">http://blog.robertonodi.me/node-authentication-series-email-and-password/</a></p>
  
  <p>When I try to login I get an <code>'Unknown authentication strategy "local" error'</code>. Can anybody explain what I'm doing wrong?</p>
  
  <h1>My code</h1>
  
  <p>(edit: added some changes from answers/comments and filenames)</p>
  
  <h2>Express config (config/express.config.js)</h2>
  
  <pre><code>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();
  })
  </code></pre>
  
  <h2>Passport config (config/auth.config.js)</h2>
  
  <pre><code>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
  }
  </code></pre>
  
  <h2>Local strategy (/config/strategies/local-strategy.js)</h2>
  
  <pre><code>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);
          })
      }))
  }
  </code></pre>
  
  <h2>Auth Controller (login only) (/controllers/auth.controller.js)</h2>
  
  <pre><code>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);
  }
  </code></pre>