Search code examples
node.jsexpresspassport.jsbox-api

Passport not being called


my passport strategy is never called. I recently added passport to my project and am using Boxes API to log a user in. I have done the example problem in another project and gotten it to work (https://github.com/smithdavedesign/OAUTH-Passport-BoxAPILogin-Example/blob/master/login/BoxLogin.js), however when I am trying to integrate it into my current project something has gone haywire. I read sessions and passport session are different and should not cause an issue, that being said I trying to figure out what middle ware is causing the issue. The box API is working correctly and returning me to my dashboard on the callback, however passport seams to be being skipped.

var products = require("../controllers/products");//get functions from product like add update delete ect
var validations = require("../controllers/validations");//get functions from product like add update delete ect
var settings = require("../config/settings");// get all things from settings we need
var Promise = require("bluebird");// adding promise mechanism
var bodyParser = require('body-parser');
var express = require('express');//web framework for node
const expressLayouts = require('express-ejs-layouts');// ejs view engine
const flash = require('connect-flash');//for error and success messages
const session = require('express-session');// holds data of users after login
const uuid = require('uuid')
var MemoryStore = require('memorystore')(session)//https://www.npmjs.com/package/memorystore
const util = require('util');
var os = require("os");
var hostname = os.hostname();//This is the users computer name
const multer = require('multer');
var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, 'uploads/')
    },
    filename: function (req, file, cb) {
        cb(null, file.originalname)
    }
})
const upload = multer({ storage: storage })
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var passport = require('passport');
var BoxStrategy = require('passport-box').Strategy;
const app = express();//create instance of express


var BOX_CLIENT_ID = "**";
var BOX_CLIENT_SECRET = "**";


// Passport middleware
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function (user, done) {
    console.log("serializeUser")//NEVER BEING CALLED
    done(null, user);
});
passport.deserializeUser(function (obj, done) {
    console.log("deserializeUser")//NEVER BEING CALLED
    done(null, obj);
});
passport.use(new BoxStrategy({
    clientID: BOX_CLIENT_ID,
    clientSecret: BOX_CLIENT_SECRET,
    callbackURL: "http://localhost:9000/dashboard"
},
    function (accessToken, refreshToken, profile, done) {
        // asynchronous verification, for effect...
        process.nextTick(function () {
            return done(null, profile);
        });
    }
));

//EJS
app.use(expressLayouts);
app.set('view engine', 'ejs');//view engine

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(
    session({
        genid: (req) => {
            console.log('Inside session middleware genid function')
            console.log('Request object sessionID from client: ' + req.sessionID);
            var new_sid = uuid.v4();
            console.log('New session id generated: ' + new_sid);
            return new_sid; // use UUIDs for session IDs
        },
        store: new MemoryStore({
            checkPeriod: 86400000 // prune expired entries every 24h
        }),
        secret: 'secret',
        resave: true,
        httpOnly: false,
        saveUninitialized: false,
        cookie: {
            maxAge: 24 * 60 * 60 * 1000
        }
    })
);
// Connect flash
app.use(flash());

// Global variables
app.use(function (req, res, next) {//diferent colors
    res.locals.success_msg = req.flash('success_msg');
    res.locals.error_msg = req.flash('error_msg');
    res.locals.error = req.flash('error');
    next();
});

//routes
app.use('/', require('./GraphRoutes'));
app.use('/', require('./dashboardRoutes'));
app.use('/', require('./index'));
app.use('/', require('./extraProccess'));

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

app.use(express.static('public'));//public folder where all templates live
app.use(express.static("."));

app.get('/', function (req, res) {
    res.render('index', { user: req.user });
});

app.get('/login', function (req, res) {
    res.render('login', { user: req.user });
});

app.get('/auth/box', passport.authenticate('box'), function (req, res) {
    console.log("box call")
    });
app.get('/auth/box/callback',
    passport.authenticate('box', { failureRedirect: '/login' }),
    function (req, res) {
        res.redirect('/dashboard');
    });

app.get('/logout', function (req, res) {
    req.logout();
    res.redirect('/login');
});

Solution

  • I was calling my routes before initializing passport, as well as having cookie parser and other middle ware not in the correct spot.