Skip to content

Instantly share code, notes, and snippets.

@aabmass
Last active October 12, 2016 07:32
Show Gist options
  • Save aabmass/558cccbaa74d1a80a5ce871819ef16ec to your computer and use it in GitHub Desktop.
Save aabmass/558cccbaa74d1a80a5ce871819ef16ec to your computer and use it in GitHub Desktop.
Session with login form in express (express-session)
var express = require('express')
var parseurl = require('parseurl')
var session = require('express-session')
var bodyParser = require('body-parser');
var app = express()
app.use( bodyParser.json() ); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
extended: true
}));
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
}))
app.use(function (req, res, next) {
console.log(req.session)
var views = req.session.views
if (!views) {
views = req.session.views = {}
}
// get the url pathname
var pathname = parseurl(req).pathname
// count the views
views[pathname] = (views[pathname] || 0) + 1
next()
})
app.get('/foo', function (req, res, next) {
if (!req.session.user)
// do it like this per page with restricted access, or make a middleware to
// always redirect to login
res.redirect('/login')
else
res.send('you viewed this page ' + req.session.views['/foo'] + ' times, ' +
req.session.user.username)
})
app.get('/bar', function (req, res, next) {
if (!req.session.user)
// do it like this per page with restricted access, or make a middleware to
// always redirect to login
res.redirect('/login')
else
res.send('you viewed this page ' + req.session.views['/bar'] + ' times, ' +
req.session.user.username)
})
app.get('/login', function(req, res, next) {
if (!req.session.user) {
res.send(`
<html>
<form method="post" action="login">
<input type=text placeholder="Username" name="username">
<input type="password" placeholder="Password" name="password">
<input type="submit" value="submit">
</form>
</html>`)
}
else {
res.send('You are already logged in, ' + req.session.user.username)
}
})
/**
* Here is a REST endpoint to get JSON of my user that
* e.g. backbone could consume when rendering
*/
app.get('/me', function(req, res, next) {
if (!req.session.user)
res.status(404).send('Please log in..')
else
res.json(req.session.user)
})
app.post('/login', function (req, res, next) {
let username = req.body.username
let password = req.body.password
if (!req.session.user) {
// check password then
req.session.user = {
username
}
res.send("Welcome, " + username);
}
else {
res.send("You are logged in already...")
}
})
app.listen(3000, function() { console.log('Listening on port 3000'); })
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment