Last active
December 27, 2017 12:08
-
-
Save UlisesGascon/16c2e83d06d4489d58623dac9d4139ba to your computer and use it in GitHub Desktop.
Pillars, Passport with Local and Facebook. Thanks to @bifuer & @lilxelo
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
// Passport requires | |
var passport = require('passport'); | |
var LocalStrategy = require('passport-local').Strategy; | |
var FacebookStrategy = require('passport-facebook').Strategy; | |
// Passport Local strategy | |
passport.use(new LocalStrategy( | |
function(username, password, done) { | |
if(username == "user" && password=="pass"){ | |
return done(null, {name:"Homer", id:123456}); | |
} else { | |
return done(null, false); | |
} | |
} | |
)); | |
// Passport Facebook strategy | |
var FACEBOOK_APP_ID = ""; | |
var FACEBOOK_APP_SECRET = ""; | |
var FACEBOOK_CALLBACK = "http://localhost:3000/passport/facebook"; | |
passport.use(new FacebookStrategy({ | |
clientID: FACEBOOK_APP_ID, | |
clientSecret: FACEBOOK_APP_SECRET, | |
callbackURL: FACEBOOK_CALLBACK | |
},function(accessToken, refreshToken, profile, done) { | |
done(null, profile); | |
} | |
)); | |
// Passport session serialize (RAW) | |
passport.serializeUser(function(user, done) { | |
done(null, user); | |
}); | |
passport.deserializeUser(function(id, done) { | |
done(null, id); | |
}); | |
// Pillars require | |
var project = require('../pillars/index.js').configure({ | |
debug: true, | |
renderReload: true | |
}); | |
// Setup default HTTP service | |
project.services.get('http').configure({timeout:8000,port:3000}).start(); | |
// Apply classic Connect middleware as Pillars middleware (Basic, only naming middleware) | |
project.middleware.add(Middleware({id:"passportInitialize"},passport.initialize())); | |
project.middleware.add(Middleware({id:"passportSession"},passport.session())); | |
// Create new Route container | |
var PassportCtrl = Route({ | |
id: 'passport', | |
path:'/passport', | |
method:["get"], | |
session: true // All sub-routes inherited session support | |
}, | |
function(gw){ | |
// Show links to login options: | |
gw.html( | |
'<a href="/passport/local">Local login</a>'+ | |
'<a href="/passport/facebook">Facebook login</a>' | |
); | |
} | |
); | |
// Login success, shows the session. | |
PassportCtrl.routes.add(Route({ | |
path:'/view-session', | |
session: true | |
}, function(gw){ | |
gw.json(gw.session,{deep:0}); | |
})); | |
// Passport local strategy form | |
PassportCtrl.routes.add(Route({ | |
id: 'local', | |
path:'/local', | |
method:["get"] | |
}, | |
function(gw){ | |
gw.html( | |
'<form action="locallogin" 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>'); | |
})); | |
// Passport local strategy receiver | |
PassportCtrl.routes.add(Route({ | |
id: 'local', | |
path:'/locallogin', | |
method:["post"] | |
}, | |
// Add strategy middleware | |
passport.authenticate('local',{successRedirect: '/passport/view-session', failureRedirect: '/passport/local?error=local' }) | |
)); | |
// Passport Facebook strategy login controller | |
PassportCtrl.routes.add(Route({ | |
id: 'facebook', | |
path:'/facebook', | |
method:["get"] | |
}, | |
// Add strategy middleware | |
passport.authenticate('facebook',{ successRedirect: '/passport/view-session', failureRedirect: '/passport?error=facebook' }) | |
)); | |
// Finally add the Passport controller to the project | |
// You can create a Passport login system and encapsulate as only one Route/Component, and use on any project. | |
project.routes.add(PassportCtrl); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment