Node Authentication w/Passport.js
Dependencies
npm install
the following with --save
:
- passport
- passport-local
- passport-local-mongoose
- express-session
Setup Passport in app.js
var mongoose = require('mongoose');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
Sessions
Now, let's configure sessions and Passport:
app.use(require('express-session')({
secret: 'roger panella unicorn man',
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
Model
Next, let's build our model:
// account model
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var passportLocalMongoose = require('passport-local-mongoose');
var Account = new Schema({
username: String,
password: String
});
Account.plugin(passportLocalMongoose);
module.exports = mongoose.model('Account', Account);
Controller
And finally, our controller:
//account controller
var express = require('express');
var passport = require('passport');
var Account = require('../models/Account');
var router = express.Router();
router.get('/', function (req, res) {
res.render('index', { user : req.user });
});
router.get('/register', function(req, res) {
res.render('register', { });
});
router.post('/register', function(req, res) {
Account.register(new Account({ username : req.body.username }), req.body.password, function(err, account) {
if (err) {
return res.render('register', { account : account });
}
passport.authenticate('local')(req, res, function () {
res.redirect('/');
});
});
});
router.get('/login', function(req, res) {
res.render('login', { user : req.user });
});
router.post('/login', passport.authenticate('local'), function(req, res) {
res.redirect('/');
});
router.get('/logout', function(req, res) {
req.logout();
res.redirect('/');
});
router.get('/ping', function(req, res){
res.status(200).send("pong!");
});
module.exports = router;