title: passport deserializeUser method never called
body: <p>I have got 200 response for login request, but 401 for any futher auth check requests, because deserializeUser never called. I dived into passport source and noticed that passport checks whether req._passport.session.user exists, and if no it doesn't call deserializeUser. </p>
  
  <p>I have searched through other questions on stackoverflow, it seems i have specific case. </p>
  
  <p>There is single local strategy auth type, i use Ajax request to make login requests, CORS settings configured, <a href="http://localhost:8080">http://localhost:8080</a> - frontend, <a href="http://localhost:3000">http://localhost:3000</a> backend)</p>
  
  <p>I use bodyParse, cookieParser, express session, passport initialize and passport sessions. Express session secure:false configured as i run auth requests through http.</p>
  
  <p>You can find my project here (backend package.json is good to go, so you can use it, it has no missing dependencies, as for frontend not sure), at least you can check the code there.</p>
  
  <p>Backend <a href="https://github.com/rantiev/template-api">https://github.com/rantiev/template-api</a>
  Frontend <a href="https://github.com/rantiev/template-angular">https://github.com/rantiev/template-angular</a></p>
  
  <p>Express session configuration and CORS is here <a href="https://github.com/rantiev/template-api/blob/master/modules/appConfigure.js">https://github.com/rantiev/template-api/blob/master/modules/appConfigure.js</a></p>
  
  <pre><code>var path = require('path');
  var bodyParser = require('body-parser');
  var session = require('express-session');
  var cookieParser = require('cookie-parser');
  var MongoStore = require('connect-mongo')(session);
  
  module.exports = function (app, express, config, mongoose) {
  
      app.use(cookieParser());
      app.use(bodyParser.urlencoded({
          extended: true
      }));
      app.use(bodyParser.json());
  
      app.use(function (req, res, next) {
  
          // Website you wish to allow to connect
          res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8080');
  
          // Request methods you wish to allow
          res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
  
          // Request headers you wish to allow
          res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With, X-AUTHENTICATION, X-IP, Content-Type, Origin, Accept, Cookie');
  
          // Set to true if you need the website to include cookies in the requests sent
          // to the API (e.g. in case you use sessions)
          res.setHeader('Access-Control-Allow-Credentials', true);
  
          // Pass to next layer of middleware
          next();
      });
  
      /*app.use(function (req, res, next) {
          console.log('coockie is:', req.cookies);
      });*/
  
      app.use(session({
          saveUninitialized: false,
          resave: false,
          secret: config.sessionsSecretToken,
          cookie: {
              secure: false
          },
          store: new MongoStore({ mongooseConnection: mongoose.connection })
      }));
  
      app.use(express.static(path.join(__dirname, '..' , 'public')));
  
  };
  </code></pre>
  
  <p>Passport configuration is here <a href="https://github.com/rantiev/template-api/blob/master/api/authentication/authenticationR.js">https://github.com/rantiev/template-api/blob/master/api/authentication/authenticationR.js</a></p>
  
  <pre><code>var passport = require('passport');
  var LocalStrategy = require('passport-local').Strategy;
  var rememberMe = require('../../modules/rememberMe');
  var createAccessToken = require('../../modules/createAccessToken');
  
  var bcrypt = require('bcrypt-nodejs');
  
  var UserM = require('../users/userM');
  
  module.exports = function (app, mainRouter, role) {
  
      passport.use(new LocalStrategy({
          usernameField: 'email',
          passwordField: 'password'
      }, function (username, password, done) {
  
          UserM.findOneQ({email: username})
              .then(function(user){
  
                  if (user &amp;&amp; bcrypt.compareSync(password, user.password)) {
                      done(null, user);
                  } else {
                      done(null, false);
                  }
  
              })
              .catch(function(err){
                  done(err);
              });
  
      }));
  
      passport.serializeUser(function (user, done) {
  
          console.log('serialize');
  
          if (user) {
              createAccessToken(user, done);
          } else {
              done(null, false);
          }
      });
  
      passport.deserializeUser(function (token, done) {
  
          console.log('deserialize');
  
          UserM.findOneQ({accessToken: token})
              .then(function(user){
  
                  if (user) {
                      done(null, user);
                  } else {
                      done(null, false);
                  }
  
              })
              .catch(function(err){
                  done(err);
              });
  
      });
  
      app.use(passport.initialize());
      app.use(passport.session());
  
      mainRouter.post('/me', passport.authenticate('local'), function (req, res) {
          res.status(200).send();
      });
  
      mainRouter.get('/logout', function (req, res) {
          req.logout();
          res.redirect('/');
      });
  
      mainRouter.get('/me', function (req, res) {
  
          if (!req.user) {
              res.status(401).send('Please Login!');
              return;
          }
  
          var currentUser = {
              id: req.user._id,
              role: req.user.role
          };
  
          res.status(200).json(currentUser);
      });
  
  };
  </code></pre>