Thanks to the feedback given by Biba, I could figured out a turn around. Here is the solution. And btw, the 'request' module is an http handler I use, but you could use Express' 'https' module if you want to.
var request = require('request');
var passportOptions = {
successRedirect: '/admin',
adminRedirect: '/admin/fanpages',
failureRedirect: '/login'
}
app.get('/auth/facebook/callback', function(req, res, next) {
passport.authenticate('facebook', function(err, user) {
if (err) {
return res.redirect(passportOptions.failureRedirect);
}
if (!user) {
return res.redirect(passportOptions.failureRedirect);
}
req.login(user, function(err) {
if (err) {
return res.redirect(passportOptions.failureRedirect);
} else {
request.get('https://graph.facebook.com/' + user.facebookid + '/permissions?access_token=' + user.facebookToken, function(error, response, body) {
var bodyJSON = JSON.parse(body);
if (!error && response.statusCode == 200) {
if (bodyJSON.data[0].manage_pages !== undefined) {
//admin user permissions granted
return res.redirect(passportOptions.adminRedirect);
} else {
//normal user permissions granted
return res.redirect(passportOptions.successRedirect);
}
} else {
return res.redirect(passportOptions.failureRedirect);
}
})
}
});
})(req, res, next);
});