Skip to content

Instantly share code, notes, and snippets.

@adueck
Created August 24, 2018 22:49
Show Gist options
  • Save adueck/fdd4f76af23a18b6d9ab4cc955baabf0 to your computer and use it in GitHub Desktop.
Save adueck/fdd4f76af23a18b6d9ab4cc955baabf0 to your computer and use it in GitHub Desktop.
const express = require('express');
const session = require('express-session');
const cookieParser = require('cookie-parser');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const next = require('next');
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
app.prepare().then(() => {
const server = express();
server.set('trust proxy', 1);
server.use(express.urlencoded({extended: true}));
server.use(cookieParser());
server.use(session({
secret: "cats",
cookie: { maxAge: 60000000 }
}));
server.use(passport.initialize());
server.use(passport.session());
// Passport Authentication -- bare bones test setup
passport.use(new LocalStrategy(
function(username, password, done) {
if ((username === 'adam') && (password === 'test')) {
const user = { id: 1, name: 'adam' };
return done(null, user);
}
else {
console.log("login failed");
done(null, false, { message: 'Incorrect login.' });
}
}));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
done(null, { id: 1, name: 'adam' });
});
const isLoggedIn = function(req, res, next) {
console.log("checking if logged in...")
if (req.isAuthenticated()) {
console.log("yep!");
return next();
}
console.log("nope, not logged in");
app.render(req, res, '/login');
};
server.post('/login', passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login' }));
server.get('/login', (req, res) => {
app.render(req, res, '/login');
});
server.get('/logout', (req, res) => {
console.log("got to logout");
req.session.destroy();
app.render(req, res, '/logout-screen');
})
server.get('/p/:id', isLoggedIn, (req, res) => {
const actualPage = '/post'
const queryParams = { id: req.params.id }
app.render(req, res, actualPage, queryParams)
})
server.get('*', isLoggedIn, (req, res) => {
return handle(req, res)
});
server.listen(3000, (err) => {
if (err) throw err
console.log('> Ready on http://localhost:3000')
})
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment