title: passport.js passport.initialize() middleware not in use
body: <p>I am using node with express + mongoose and trying to use passport.js with restful api.<br>
  I keep getting this exception after authentication success (I see the callback url on the browser):</p>
  
  <pre><code>/Users/naorye/dev/naorye/myproj/node_modules/mongoose/lib/utils.js:419
          throw err;
                ^
  Error: passport.initialize() middleware not in use
      at IncomingMessage.req.login.req.logIn (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/http/request.js:30:30)
      at Context.module.exports.delegate.success (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/middleware/authenticate.js:194:13)
      at Context.actions.success (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/context/http/actions.js:21:25)
      at verified (/Users/naorye/dev/naorye/myproj/node_modules/passport-facebook/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth2.js:133:18)
      at Promise.module.exports.passport.use.GitHubStrategy.clientID (/Users/naorye/dev/naorye/myproj/config/passport.js:91:24)
      at Promise.onResolve (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:162:8)
      at Promise.EventEmitter.emit (events.js:96:17)
      at Promise.emit (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:79:38)
      at Promise.fulfill (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:92:20)
      at /Users/naorye/dev/naorye/myproj/node_modules/mongoose/lib/query.js:1822:13
  </code></pre>
  
  <p>I have read that I should put <code>app.use(passport.initialize());</code> and <code>app.use(passport.session());</code> before <code>app.use(app.router);</code> and this is what I did. Here is my express.js that registers the middlewares:</p>
  
  <pre><code>var express = require('express'),
      mongoStore = require('connect-mongo')(express),
      flash = require('connect-flash'),
      helpers = require('view-helpers');
  
  module.exports = function (app, config, passport) {
      app.set('showStackError', true);
      // should be placed before express.static
      app.use(express.compress({
          filter: function (req, res) {
              return /json|text|javascript|css/.test(res.getHeader('Content-Type'));
          },
          level: 9
      }));
      app.use(express.favicon());
      app.use(express.static(config.root + '/public'));
  
      app.use(express.logger('dev'));
  
      // set views path, template engine and default layout
      app.set('views', config.root + '/app/views');
      app.set('view engine', 'jade');
  
      app.configure(function () {
          // use passport session
          app.use(passport.initialize());
          app.use(passport.session());
  
          // dynamic helpers
          app.use(helpers(config.app.name));
  
          // cookieParser should be above session
          app.use(express.cookieParser());
  
          // bodyParser should be above methodOverride
          app.use(express.bodyParser());
          app.use(express.methodOverride());
  
          // express/mongo session storage
          app.use(express.session({
              secret: 'linkit',
              store: new mongoStore({
                  url: config.db,
                  collection : 'sessions'
              })
          }));
  
          // connect flash for flash messages
          app.use(flash());
  
          // routes should be at the last
          app.use(app.router);
  
          // assume "not found" in the error msgs
          // is a 404. this is somewhat silly, but
          // valid, you can do whatever you like, set
          // properties, use instanceof etc.
          app.use(function(err, req, res, next){
              // treat as 404
              if (~err.message.indexOf('not found')) {
                  return next();
              }
  
              // log it
              console.error(err.stack);
  
              // error page
              res.status(500).render('500', { error: err.stack });
          });
  
          // assume 404 since no middleware responded
          app.use(function(req, res, next){
              res.status(404).render('404', {
                  url: req.originalUrl,
                  error: 'Not found'
              });
          });
      });
  };
  </code></pre>
  
  <p>What is wrong?</p>
  
  <p><strong>UPDATE</strong>
  According to @Peter Lyons I have changed the configurations order to the following, but I still got the same error:</p>
  
  <pre><code>var express = require('express'),
      mongoStore = require('connect-mongo')(express),
      flash = require('connect-flash'),
      helpers = require('view-helpers');
  
  module.exports = function (app, config, passport) {
      app.set('showStackError', true);
      // should be placed before express.static
      app.use(express.compress({
          filter: function (req, res) {
              return /json|text|javascript|css/.test(res.getHeader('Content-Type'));
          },
          level: 9
      }));
      app.use(express.favicon());
      app.use(express.static(config.root + '/public'));
  
      app.use(express.logger('dev'));
  
      // set views path, template engine and default layout
      app.set('views', config.root + '/app/views');
      app.set('view engine', 'jade');
  
      app.configure(function () {
  
          // dynamic helpers
          app.use(helpers(config.app.name));
  
          // cookieParser should be above session
          app.use(express.cookieParser());
  
          // bodyParser should be above methodOverride
          app.use(express.bodyParser());
          app.use(express.methodOverride());
  
          // express/mongo session storage
          app.use(express.session({
              secret: 'linkit',
              store: new mongoStore({
                  url: config.db,
                  collection : 'sessions'
              })
          }));
  
          // connect flash for flash messages
          app.use(flash());
  
          // use passport session
          app.use(passport.initialize());
          app.use(passport.session());
  
          // routes should be at the last
          app.use(app.router);
  
          // assume "not found" in the error msgs
          // is a 404. this is somewhat silly, but
          // valid, you can do whatever you like, set
          // properties, use instanceof etc.
          app.use(function(err, req, res, next){
              // treat as 404
              if (~err.message.indexOf('not found')) {
                  return next();
              }
  
              // log it
              console.error(err.stack);
  
              // error page
              res.status(500).render('500', { error: err.stack });
          });
  
          // assume 404 since no middleware responded
          app.use(function(req, res, next){
              res.status(404).render('404', {
                  url: req.originalUrl,
                  error: 'Not found'
              });
          });
      });
  };
  </code></pre>