Last active
November 7, 2016 12:33
-
-
Save DarrenHurst/5636968 to your computer and use it in GitHub Desktop.
passport service / node
This file contains 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
//CALLBACK PREFIX | |
var CALLBACK_PREFIX = " " | |
//-=-=-=-=-=-=-=-=-=-=-= | |
var FACEBOOK_API_ID = ' '; | |
var FACEBOOK_APP_SECRET = ' '; | |
var FACEBOOK_CALLBACKURL = CALLBACK_PREFIX +"/auth/facebook/callback"; | |
//-=-=-=-=-=-=-=-=-=-=-= | |
//-=-=-=-=-=-=-=-=-=-=-= | |
var GOOGLE_CALLBACKURL = ''; | |
var GOOGLE_REALM = ''; | |
//-=-=-=-=-=-=-=-=-=-=-= | |
//-=-=-=-=-=-=-=-=-=-=-= | |
var TWITTER_CONSUMER_KEY = ' '; | |
var TWITTER_CONSUMER_SECRET = ' '; | |
var TWITTER_CALLBACKURL = CALLBACK_PREFIX +"/auth/twitter/callback"; | |
//-=-=-=-=-=-=-=-=-=-=-= | |
//-=-=-=-=-=-=-=-=-=-=-= | |
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); | |
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> | |
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> | |
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> | |
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"); | |
} | |
} | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
npm install passport
npm install passport-local
npm install passport-facebook
etc.