Skip to content

Instantly share code, notes, and snippets.

@codebubb
Created July 5, 2019 11:21
Show Gist options
  • Select an option

  • Save codebubb/0d9053d129a4d8034554eee2602242c4 to your computer and use it in GitHub Desktop.

Select an option

Save codebubb/0d9053d129a4d8034554eee2602242c4 to your computer and use it in GitHub Desktop.
Passport local
// app.js
const MongoClient = require('mongodb').MongoClient;
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const ObjectID = require('mongodb').ObjectID;
MongoClient.connect('mongodb://localhost:27017/test', (err, client) => {
if (err) throw err;
const db = client.db('test');
const users = db.collection('users');
app.locals.users = users;
});
app.use(require('express-session')({ secret: 'keyboard cat', resave: false, saveUninitialized: false }));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(
(username, password, done) => {
app.locals.users
.findOne({ username })
.then(user => {
if (!user) {
return done(null, false);
}
if (user.password !== password) {
return done(null, false);
}
return done(null, user);
})
.catch(done);
})
);
passport.serializeUser(function(user, done) {
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
done(null, { id })
});
// routes.js
const passport = require('passport');
const ensureAuthenticated = (req, res, next) => {
if (req.isAuthenticated()) return next();
res.redirect('/login');
}
router.get('/secret', ensureAuthenticated, (req, res, next) => {
res.set('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');
res.send('Secret area');
});
router.get('/login', (req, res, next) => {
res.render('login');
})
router.get('/logout', (req, res, next) => {
req.logout();
req.session.destroy();
res.redirect('/login');
});
router.post('/login',
passport.authenticate('local', { failureRedirect: '/login' }),
(req, res, next) => {
res.redirect('/secret');
}
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment