Nodejs Passport Authentication

I am following the nodejs book here: https://www.packtpub.com/web-development/mean-web-development

Everything goes smoothly until I try to login using the passport module. It just hangs without error. I've tried other solutions I've found on SO, such as reordering middleware, but I think they might be for different versions of Express, as some syntaxes look slightly different (and don't work). Here are the relevant parts. Any help would be greatly appreciated!

Package.json:

{
"name": "MEAN",
"version": "0.0.3",
"description": "First mean app",
"dependencies": {
  "express":            "~4.8.8",
  "morgan":             "~1.3.0",
  "compression":        "~1.0.11",
  "body-parser":        "~1.8.0",
  "method-override":    "~2.2.0",
  "express-session":    "~1.7.6",
  "ejs":                "~1.0.0",
  "connect-flash":      "~0.1.1",
  "mongoose":           "~3.8.15",
  "passport":           "~0.2.1",
  "passport-local":     "~1.0.0"
}
}

      

express.js:

module.exports = function(){
var app = express();



if(process.env.NODE_ENV === 'development'){
    app.use(morgan('dev'));
}else if(process.env.NODE_ENV === 'production'){
    app.use(compress());
}

app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());
app.use(methodOverride());

app.use(session({
   saveUnitialized: true,
   resave: true,
   secret: config.sessionSecret
}));


app.set('views', './app/views');
app.set('view engine', 'ejs');

app.use(flash());
app.use(passport.initialize());
app.use(passport.session());


require('../app/routes/index.server.routes.js')(app);
require('../app/routes/users.server.routes.js')(app);

app.use(express.static('./public'));

return app;
};

      

passport.js

module.exports = function(){

var User = mongoose.model('User');

passport.serializeUser(function(user, done){
    done(null, user.id);
});

passport.deserializeUser(function(id, done){
   User.findOne({
       _id: id
   }, '-password -salt'), function(err, user){
       done(err, user);
   }; 
});

require('./strategies/local.js')();
};

      

routing:

 app.route('/signin')
    .get(users.renderSignin)
    .post(passport.authenticate('local',{
        successRedirect: '/',
        failureRedirect: '/signin',
        failureFlash: true
    }));

      

Edit: this appears to be the pass.deserializeUser function where things break

+3


source to share


1 answer


Ok, I went to passport documents and pasted into the code from there and it seems to work. So ... any idea why the MEAN book example isn't working?

Code that worked:



passport.deserializeUser(function(id, done) {
   User.findById(id, function(err, user) {
     done(err, user);
   });
 });

      

+2


source







All Articles