Skip to content

Instantly share code, notes, and snippets.

@thegoleffect
Last active December 14, 2015 08:49
Show Gist options
  • Save thegoleffect/5060509 to your computer and use it in GitHub Desktop.
Save thegoleffect/5060509 to your computer and use it in GitHub Desktop.
travelogue LocalStrategy example
/* Remember to:
npm install hapi passport yar travelogue
*/
var Hapi = require('hapi');
var Travelogue = require('travelogue');
var Passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
// var config = require('./config.json');
var config = {
"port": 8000,
"yar": {
"cookieOptions": {
"password": "worldofwalmart"
},
"session": true
},
"passport": {
"urls": {
"failureRedirect": "/login"
}
}
};
var server = new Hapi.Server('localhost', config.port);
Travelogue.configure(server, Passport, config);
var USERS = {
"van": "walmart"
};
Passport.use(new LocalStrategy(function (username, password, done) {
console.log('credentials entered:', arguments)
// Find or create user here...
if (USERS.hasOwnProperty(username) && USERS[username] == password) {
console.log('username found', username)
return done(null, {username: username});
}
console.log('invalid credentials')
return done(null, false, {'message': 'invalid credentials'});
}));
Passport.serializeUser(function(user, done) {
done(null, user);
});
Passport.deserializeUser(function(obj, done) {
done(null, obj);
});
// addRoutes
server.addRoute({
method: 'GET',
path: '/',
config: {
handler: Travelogue.ensureAuthenticated(function (request) {
// If logged in already, redirect to /home
// else to /login
request.reply.redirect('/home').send();
})
}
});
server.addRoute({
method: 'GET',
path: '/login',
config: {
handler: function (request) {
var form = '<form action="/login" method="post"> <div> <label>Username:</label> <input type="text" name="username"/> </div> <div> <label>Password:</label> <input type="password" name="password"/> </div> <div> <input type="submit" value="Log In"/> </div> </form>';
request.reply(form);
}
}
});
server.addRoute({
method: 'GET',
path: '/home',
config: {
handler: Travelogue.ensureAuthenticated(function (request) {
// If logged in already, redirect to /home
// else to /login
request.reply("ACCESS GRANTED");
})
}
});
server.addRoute({
method: 'POST',
path: '/login',
config: {
validate: {
schema: {
username: Hapi.Types.String(),
password: Hapi.Types.String()
}
},
handler: function (request) {
// console.log('post hit', request)
request.body = request.payload;
Passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login'
})(request, function () {
request.reply.redirect('/').send();
})
}
}
})
server.addRoute({
method: 'GET',
path: '/clear',
config: {
handler: function (request) {
request.session = {};
request.clearState('yar');
request.reply('ohai');
}
}
});
server.addRoute({
method: 'GET',
path: '/session',
config: {
handler: function (request) {
request.reply(request.session);
}
}
});
server.start(function () {
console.log('server started on port ' + config.port);
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment