Last active
October 12, 2016 07:32
-
-
Save aabmass/558cccbaa74d1a80a5ce871819ef16ec to your computer and use it in GitHub Desktop.
Session with login form in express (express-session)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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