How to pass the configured passport object into the routes modules in Express4?
Asked Answered
P

1

6

Since from Express 4 you're not supposed to do

require('./app/routes.js')(app, passport); // load our routes and pass in our app and fully configured passport

module.exports = function(app, passport) {
    // =====================================
    // FACEBOOK ROUTES =====================
    // =====================================
    // route for facebook authentication and login

    app.get('/auth/facebook', passport.authenticate('facebook', { scope : 'email' }));

    // handle the callback after facebook has authenticated the user
    app.get('/auth/facebook/callback',
        passport.authenticate('facebook', {
            successRedirect : '/profile',
            failureRedirect : '/'
        }));

    // route for logging out
    app.get('/logout', function(req, res) {
        req.logout();
        res.redirect('/');
    });
};

Instead, you're supposed to be using express.Route() function and

var routes = require('./app/routes.js');
app.use('/', routes);

How to pass the configured passport into the routes modules in Express 4?

Public answered 7/12, 2014 at 7:10 Comment(0)
I
8

The function export can still be used to pass the passport reference between modules. It would just create and return a Router rather than modifying the app directly.

var express = require('express');

module.exports = function(passport) {
    var router = express.Router();

    router.get('/auth/facebook', passport.authenticate('facebook', { scope : 'email' }));

    // etc.

    return router;
};

And, the app can then use it with:

var routes = require('./app/routes.js')(passport);
app.use('/', routes);
Irrecoverable answered 7/12, 2014 at 7:24 Comment(3)
but when I tried the implementation above, I just got a new problem: Cannot GET /auth/facebook/callback?code=************** and there is no error info. How can I deal with this?Public
@Public I snipped out some of the routes from my post to keep it short, replaced with // etc. Did you copy that line or do you have the router with '/auth/facebook/callback' and '/logout' routes?Irrecoverable
I'm afraid yes.... Now I'm getting back to the original Error: read ETIMEDOUT... I have absolute no clue what's going on there... sorry manPublic

© 2022 - 2024 — McMap. All rights reserved.