Note that there are some explanatory texts on larger screens.

plurals
  1. PONodeJS Passport
    primarykey
    data
    text
    <p>I setup passport on nodejs and have it working with mongoose for allowing users to login and create new accounts. </p> <p>app.js:</p> <pre><code>var express = require('express') , app = module.exports = express.createServer() , passport = require('passport') , LocalStrategy = require('passport-local').Strategy , routes = require('./routes/index')(app) //index loads in multiple routes , MongoDBConnection = require('./database/DatabaseConnector').MongoDBConnection; // Configuration app.configure(function(){ app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.cookieParser()); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.session({ secret: 'justdoit' })); app.use(passport.initialize()); app.use(passport.session()); app.use(app.router); app.use(express.static(__dirname + '/public')); }); var mongoDbConnection = new MongoDBConnection(); passport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { mongoDbConnection.findUserById(id, function(err, user){ done(err, user); }); }); passport.use(new LocalStrategy( function(username, password, done) { process.nextTick(function () { mongoDbConnection.findUser(username, function(err, user) { //conditions.... }); }); } )); app.get('/', function(req, res){ res.render('index', { title: "Index", user: req.user }); }); app.get('/account', ensureAuthenticated, function(req, res){ res.render('account', { title: "Account", user: req.user }); }); app.get('/login', function(req, res){ res.render('login', { title: "Login", user: req.user, message: req.flash('error') }); }); app.post('/login', passport.authenticate('local', { successRedirect: '/account', failureRedirect: '/login', failureFlash: true }) ); function ensureAuthenticated(req, res, next) { if (req.isAuthenticated()) { return next(); } res.redirect('/login') } </code></pre> <p>My problem is the app.js (which is where the passport code is) file is getting a bit large and I tried to move the passport sections into its own script and have the routes outside the app.js and in its own auth.js route file and then reference the routes via the app.js. It works for other routes but for passport related ones such as login it doesnt appear to fire the passport.authenicate() function. </p> <p>Is there anyway I can put passport routes and functions into its own file and call it/load it from app.js? </p> <p>auth.js: </p> <pre><code>module.exports = function(app){ passport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { mongoDbConnection.findUserById(id, function(err, user){ done(err, user); }); }); passport.use(new LocalStrategy( function(username, password, done) { process.nextTick(function () { mongoDbConnection.findUser(username, function(err, user) { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Unknown user ' + username }); } if (user.password != password) { return done(null, false, { message: 'Invalid password' }); } return done(null, user); }); }); } )); app.get('/', function(req, res){ res.render('index', { title: "Index", user: req.user }); }); app.get('/account', ensureAuthenticated, function(req, res){ console.log("directing to the account page...."); res.render('account', { title: "Account", user: req.user }); }); app.get('/login', function(req, res){ res.render('login', { title: "Login", user: req.user, message: req.flash('error') }); }); app.post('/login', passport.authenticate('local', { successRedirect: '/account', failureRedirect: '/login', failureFlash: true }) ); function ensureAuthenticated(req, res, next) { if (req.isAuthenticated()) { return next(); } res.redirect('/login') } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload