Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Express Passport.js Success redirect doesn't load page, request keeps pending

I am trying to do a basic username/password authentication using passport.js and passport local.

While failureRedirect does exactly what it is supposed to do, (redirects to a specified page), successRedirect keeps pending with the request for its specified page, and after some time, it returns empty response.

http://www.deviantpics.com/VdG

As you can see in this picture, when it is requesting dashboard, it says that its size is 0B, but when I go on that dashboard without redirecting it says it has 1.6B.

I have looked all over Stackoverflow, and I couldn't find an answer that would help me.

Could you please check my code and suggest something before I go berserk?

This is passport load code

//set expression
var expressSession = require('express-session');
app.use(expressSession({
    secret: credentials.session.secret
}));

//set passport
var passport = require('passport');

var localStrategy = require('./strategies/auth/local.js');
passport.use('local', localStrategy);

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

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

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

routes.js

module.exports = function(app) {

//main
app.get('/', main.home);
app.get('/login', main.login);
app.get('/signup', main.signup);
app.post('/login', auth.loginLocal);
app.post('/signup', main.checkSignup);

//user
app.get('/user/dashboard', user.dashboard);
app.get('/user/addmemory', user.addMemory);
app.get('/user/memory', user.memory);

login function

exports.loginLocal = passport.authenticate('local', {
    successRedirect: '/user/dashboard',
    failureRedirect: '/login'
});

local strategy

var localAuthStrategy = 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);
    });


});

dashboard function

exports.dashboard = function(req, res) {
    res.render('user/dashboard', {
        layout: 'user'
    });
};
like image 207
Zorkan Avatar asked Sep 14 '15 23:09

Zorkan


1 Answers

I found an answer to my question, the problem was that the User model was not defined in the script where serializeUser and deserializeUser were defined. I could not figure out what was going on, because I did not define any action in catch all handler, so a thing to remember, make sure to have catch all handler defined to know what is happening

app.use(function(err, req, res, next) {
    console.log(err);
});
like image 68
Zorkan Avatar answered Nov 18 '22 13:11

Zorkan