diff --git a/config/strategies/facebook.js b/config/strategies/facebook.js new file mode 100644 index 00000000..ef6c9866 --- /dev/null +++ b/config/strategies/facebook.js @@ -0,0 +1,42 @@ +'use strict'; + +var passport = require('passport'), + FacebookStrategy = require('passport-facebook').Strategy, + User = require('mongoose').model('User'), + config = require('../config'); + +module.exports = function() { + // Use facebook strategy + passport.use(new FacebookStrategy({ + clientID: config.facebook.clientID, + clientSecret: config.facebook.clientSecret, + callbackURL: config.facebook.callbackURL, + }, + function(accessToken, refreshToken, profile, done) { + User.findOne({ + 'providerData.id': profile.id + }, function(err, user) { + if (err) { + return done(err); + } + if (!user) { + user = new User({ + firstName: profile.name.givenName, + lastName: profile.name.familyName, + displayName: profile.displayName, + email: profile.emails[0].value, + username: profile.username, + provider: 'facebook', + providerData: profile._json + }); + user.save(function(err) { + if (err) console.log(err); + return done(err, user); + }); + } else { + return done(err, user); + } + }); + } + )); +}; \ No newline at end of file diff --git a/config/strategies/google.js b/config/strategies/google.js new file mode 100644 index 00000000..053e1e32 --- /dev/null +++ b/config/strategies/google.js @@ -0,0 +1,39 @@ +'use strict'; + +var passport = require('passport'), + GoogleStrategy = require('passport-google-oauth').OAuth2Strategy, + User = require('mongoose').model('User'), + config = require('../config'); + +module.exports = function() { + // Use google strategy + passport.use(new GoogleStrategy({ + clientID: config.google.clientID, + clientSecret: config.google.clientSecret, + callbackURL: config.google.callbackURL + }, + function(accessToken, refreshToken, profile, done) { + User.findOne({ + 'providerData.id': profile.id + }, function(err, user) { + if (!user) { + user = new User({ + firstName: profile.name.givenName, + lastName: profile.name.familyName, + displayName: profile.displayName, + email: profile.emails[0].value, + username: profile.username, + provider: 'google', + providerData: profile._json + }); + user.save(function(err) { + if (err) console.log(err); + return done(err, user); + }); + } else { + return done(err, user); + } + }); + } + )); +}; \ No newline at end of file diff --git a/config/strategies/linkedin.js b/config/strategies/linkedin.js new file mode 100644 index 00000000..61c82225 --- /dev/null +++ b/config/strategies/linkedin.js @@ -0,0 +1,40 @@ +'use strict'; + +var passport = require('passport'), + LinkedInStrategy = require('passport-linkedin').Strategy, + User = require('mongoose').model('User'), + config = require('../config'); + +module.exports = function() { + // Use linkedin strategy + passport.use(new LinkedInStrategy({ + consumerKey: config.linkedin.clientID, + consumerSecret: config.linkedin.clientSecret, + callbackURL: config.linkedin.callbackURL, + profileFields: ['id', 'first-name', 'last-name', 'email-address'] + }, + function(accessToken, refreshToken, profile, done) { + User.findOne({ + 'providerData.id': profile.id + }, function(err, user) { + if (!user) { + user = new User({ + firstName: profile.name.givenName, + lastName: profile.name.familyName, + displayName: profile.displayName, + email: profile.emails[0].value, + username: profile.username, + provider: 'linkedin', + providerData: profile._json + }); + user.save(function(err) { + if (err) console.log(err); + return done(err, user); + }); + } else { + return done(err, user); + } + }); + } + )); +}; \ No newline at end of file diff --git a/config/strategies/local.js b/config/strategies/local.js new file mode 100644 index 00000000..0c4a1256 --- /dev/null +++ b/config/strategies/local.js @@ -0,0 +1,35 @@ +'use strict'; + +var passport = require('passport'), + LocalStrategy = require('passport-local').Strategy, + User = require('mongoose').model('User'); + + +module.exports = function() { + // Use local strategy + passport.use(new LocalStrategy({ + usernameField: 'email', + passwordField: 'password' + }, + function(email, password, done) { + User.findOne({ + email: email + }, function(err, user) { + if (err) { + return done(err); + } + if (!user) { + return done(null, false, { + message: 'Unknown user' + }); + } + if (!user.authenticate(password)) { + return done(null, false, { + message: 'Invalid password' + }); + } + return done(null, user); + }); + } + )); +}; \ No newline at end of file diff --git a/config/strategies/twitter.js b/config/strategies/twitter.js new file mode 100644 index 00000000..ef98e46b --- /dev/null +++ b/config/strategies/twitter.js @@ -0,0 +1,40 @@ +'use strict'; + +var passport = require('passport'), + TwitterStrategy = require('passport-twitter').Strategy, + User = require('mongoose').model('User'), + config = require('../config'); + +module.exports = function() { + // Use twitter strategy + passport.use(new TwitterStrategy({ + consumerKey: config.twitter.clientID, + consumerSecret: config.twitter.clientSecret, + callbackURL: config.twitter.callbackURL + }, + function(token, tokenSecret, profile, done) { + console.log(profile); + User.findOne({ + 'providerData.id_str': profile.id + }, function(err, user) { + if (err) { + return done(err); + } + if (!user) { + user = new User({ + displayName: profile.displayName, + username: profile.username, + provider: 'twitter', + providerData: profile._json + }); + user.save(function(err) { + if (err) console.log(err); + return done(err, user); + }); + } else { + return done(err, user); + } + }); + } + )); +}; \ No newline at end of file