Skip to content

Instantly share code, notes, and snippets.

@DarrenHurst
Last active November 7, 2016 12:33
Show Gist options
  • Save DarrenHurst/5636968 to your computer and use it in GitHub Desktop.
Save DarrenHurst/5636968 to your computer and use it in GitHub Desktop.
passport service / node
//CALLBACK PREFIX
var CALLBACK_PREFIX = " "
//FACEBOOK
//-=-=-=-=-=-=-=-=-=-=-=
var FACEBOOK_API_ID = ' ';
var FACEBOOK_APP_SECRET = ' ';
var FACEBOOK_CALLBACKURL = CALLBACK_PREFIX +"/auth/facebook/callback";
//-=-=-=-=-=-=-=-=-=-=-=
//GOOGLE
//-=-=-=-=-=-=-=-=-=-=-=
var GOOGLE_CALLBACKURL = '';
var GOOGLE_REALM = '';
//-=-=-=-=-=-=-=-=-=-=-=
//TWITTER
//-=-=-=-=-=-=-=-=-=-=-=
var TWITTER_CONSUMER_KEY = ' ';
var TWITTER_CONSUMER_SECRET = ' ';
var TWITTER_CALLBACKURL = CALLBACK_PREFIX +"/auth/twitter/callback";
//-=-=-=-=-=-=-=-=-=-=-=
//LinkedIn
//-=-=-=-=-=-=-=-=-=-=-=
var LINKEDIN_API_KEY = ' ';
var LINKEDIN_SECRET_KEY = ' ';
var LINKEDIN_CALLBACKURL = CALLBACK_PREFIX +'/auth/linkedin/callback';
//PASSPORT AUTHENTICATION
var mongoose = require('mongoose');
var users = require('../../models/user.js');
var passport;
var FacebookStrategy = require('passport-facebook').Strategy
, LocalStrategy = require('passport-local').Strategy
, TwitterStrategy = require('passport-twitter').Strategy
, GoogleStrategy = require('passport-google').Strategy
, LinkedInStrategy = require('passport-linkedin').Strategy;
exports.init = function(app,pass){
passport = pass;
//find or create
var findOrCreate = function(provider, id, name, done,profile) {
var that = this;
that.hasRecord = "NO";
users.find().where("auth.provider").equals(provider).where("auth.id").equals(profile.id).exec(function(err,user){
if(err) done(err);
else {
console.log("*************** user length"+user.length);
if(user.length == 0){
user=new users();
user.auth.provider = provider;
user.auth.id = id;
user.username = profile.username;
user.displayName = profile.displayName;
user.raw = profile._raw;
user.photos = JSON.stringify(profile.photos);
user.json = JSON.stringify(profile._json);
user.save();
}
done(null,user);
}
});
}
//** PASSPORT STRATEGIES
passport.use(new LocalStrategy(
function(username, password, done) {
console.log(username+"/"+password);
users.find().where("username").equals(username).exec(function(err,user){
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (user[0].auth.password!=password) { return done(null, false); }
return done(null, user);
});
}
));
passport.use(new LinkedInStrategy({
consumerKey: LINKEDIN_API_KEY,
consumerSecret: LINKEDIN_SECRET_KEY,
callbackURL: LINKEDIN_CALLBACKURL
},
function(accessToken, refreshToken, profile, done) {
findOrCreate('linkedin', profile.id, profile.name, done,profile);
}
));
passport.use(new FacebookStrategy({
clientID: FACEBOOK_API_ID,
clientSecret: FACEBOOK_APP_SECRET,
callbackURL: FACEBOOK_CALLBACKURL
},
function(accessToken, refreshToken, profile, done) {
findOrCreate('facebook', profile.id, profile.name, done,profile);
}
));
passport.use(new GoogleStrategy({
returnURL: 'http://www.example.com/auth/google/return',
realm: 'http://www.example.com/'
},
function(identifier, profile, done) {
/*User.findOrCreate({ openId: identifier }, function(err, user) {
done(err, user);
}); */
}
));
passport.use(new TwitterStrategy({
consumerKey: TWITTER_CONSUMER_KEY,
consumerSecret: TWITTER_CONSUMER_SECRET,
callbackURL: TWITTER_CALLBACKURL
},
function(token, tokenSecret, profile, done) {
//console.log(profile);
findOrCreate('twitter', profile.id, profile.name, done,profile);
}
));
//LOCAL
app.post('/auth/login',
passport.authenticate('local', { failureRedirect: '/login' }),
function(req, res) {
console.log("redirect local login success");
//res.redirect('#/view2');
res.send("success");
});
app.post('/auth/register',this.registerUser);
//***FACEBOOK
app.get('/auth/facebook', passport.authenticate('facebook', { scope: ['read_stream', 'publish_actions','email'] }));
app.get('/auth/facebook/callback',
passport.authenticate('facebook', { successRedirect: '#/view2',
failureRedirect: '#/login' }));
//html to route
//<a href="/auth/facebook">Login with Facebook</a>
//***GOOGLE
app.get('/auth/google', passport.authenticate('google'));
app.get('/auth/google/return',
passport.authenticate('google', { successRedirect: '/',
failureRedirect: '/view1' }));
//<a href="/auth/google">Sign In with Google</a>
//***TWITTER
app.use('/auth/twitter', passport.authenticate('twitter'));
app.get('/auth/twitter/callback',
passport.authenticate('twitter', { failureRedirect: '#/login' }),
function(req, res) {
res.redirect('#/view2');
});
//<a href="/auth/twitter">Sign in with Twitter</a>
//*** LINKEDIN
app.get('/auth/linkedin',
passport.authenticate('linkedin',{ scope: ['r_basicprofile', 'r_emailaddress'] }));
app.get('/auth/linkedin/callback',
passport.authenticate('linkedin', { failureRedirect: '#/login' }),
function(req, res) {
// Successful authentication, redirect home.
res.send('success');
});
}
exports.registerUser = function(req,res){
users.find().where("username").equals(req.body.email).exec(function(err,user){
if(err) done(err);
else {
console.log("*************** user length"+user.length);
if(user.length == 0){
console.log(req.body);
var user = new users();
user.auth.id = user._id;
user.auth.provider = 'local';
user.auth.password = req.body.password;
user.displayName = req.body.name;
user.username = req.body.email;
user.save();
res.send("success");
}
}
});
}
@DarrenHurst
Copy link
Author

npm install passport
npm install passport-local
npm install passport-facebook

etc.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment