Thursday, 11 May 2017

passportjs deserializeUser nothing happen after call

am using nodejs and express with passportJS to auth my users with session (very important to use session in my case)

basically, i have a dashboard and I want to auth each request using isLoggedIn middleware

after the user logged in, the function (deserializeUser) get running and run the findById but nothing happened after that !!!

below my code

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// required for passport

app.use(session({ secret: 'anything' }));
app.use(passport.initialize());
app.use(passport.session());

passport.serializeUser(function(user, done) {

    console.log("serializeUser =>"+user);

    done(null, user.id);
});

passport.deserializeUser(function(id, done) {
    console.log("Deaire ==>"+id);

    models.User.findById(id, function(err, user) {

        if(user)
            return done(false,user);
        return done(false,false);

    });
});

passport.use(new UniqueTokenStrategy({
        session: true},
    function (token, done) {
        models.User.findOne({where: {token: token}}).then(function (user) {
            models.userHasRoles.findOne({

                where: {

                    userId: user.id


                }
            }).then(function (hasRoles) {


                if (!hasRoles) {
                    return done(null, false);
                }
                return done(null, user);
            });
        })
    }

));

passport.use('local',new LocalStrategy({
        usernameField: 'phone_number',
        passwordField: 'pin',
        session: true,
        passReqToCallback : true
    },
    function(req,phone_number, pin, done) {

        console.log("Inside local str");

        models.PhoneVerification.findOne({ where: {phoneNumber: phone_number, pinCode:pin}}).then(function (phoneVerification) {

            if(phoneVerification==null){

                models.configuration.findOne({
                    where:{name :"default pin"}
                }).then(function (configuration) {

                    if(configuration.detail==pin){

                    }else {

                        return done(null, false, {message: "Couldn't login"});
                    }
                })
            }
            models.User.findOne({where: {phoneNumber: phone_number}}).then(function (user) {

                if(user == null){

                    models.User.create({
                        phoneNumber: phone_number,
                        token: randtoken.generate(32)
                    }).then(function (user) {

                        return done(null, user);
                    });
                }else {

                    user.update({token: randtoken.generate(32)}).then(function () {

                        return done(null, user);
                    });

                }
            });
        })
    }
));

so till now everthing is good , i can check if am not logged in , but if i am really logged in then the code get idle there

here is my middleware to check the session

function isLoggedIn(req, res, next) {

console.log("first auth");

// if user is authenticated in the session, carry on
if (req.isAuthenticated()) {
    return next();

}

so when am trying to check iof am logged in or not i get the following from console

Deaire ==>17152 Executing (default): SELECT id, firstName, lastName, phoneNumber, photo, token, deviceToken, osInfo, actualLat, actualLng, cityId, countryId, status, createdAt, updatedAt FROM users AS User WHERE User.id = 17152;



via Faisal

No comments:

Post a Comment