/app/config/passport.js
JavaScript | 256 lines | 181 code | 50 blank | 25 comment | 17 complexity | 858a210577851fa8b93d074e97275bbc MD5 | raw file
- 'use strict';
- var LocalStrategy = require('passport-local').Strategy;
- var FacebookStrategy = require('passport-facebook').Strategy;
- var TwitterStrategy = require('passport-twitter').Strategy;
- var InstagramStrategy = require('passport-instagram').Strategy;
- var MailChimpStrategy = require('passport-mailchimp').Strategy;
- var traceur = require('traceur');
- var User = traceur.require(__dirname + '/../models/user.js');
- var userCollection = global.nss.db.collection('users');
- var _ = require('lodash');
- var configAuth = require('./auth');
- module.exports = function(passport) {
- passport.serializeUser(function(user, done) {
- done(null, user._id);
- });
- passport.deserializeUser(function(id, done) {
- User.findById(id, function(err, user) {
- done(err, user);
- });
- });
- // *********** LOCAL SIGNUP ***************
- passport.use('local-signup', new LocalStrategy({
- usernameField : 'email',
- passwordField : 'password',
- passReqToCallback : true
- },
- function(req, email, password, done) {
- req.flash('signupMessage', '');
- process.nextTick(function() {
- userCollection.findOne({ 'local.email' : email }, function(err, user) {
- if (err){
- return done(err);
- }
- if (user) {
- return done(null, false, req.flash('signupMessage', 'That email is already taken.'));
- } else {
- var newUser = new User();
- newUser.local.email = email;
- newUser.local.password = newUser.generateHash(password);
- newUser.save(function(err) {
- if (err){
- throw err;
- }
- return done(null, newUser);
- });
- }
- });
- });
- }));
- // *************** LOCAL LOGIN *****************
- passport.use('local-login', new LocalStrategy({
- usernameField : 'email',
- passwordField : 'password',
- passReqToCallback : true
- },
- function(req, email, password, done) {
- userCollection.findOne({ 'local.email' : email }, function(err, user) {
- user = _.create(User.prototype, user);
- if (err){
- return done(err);
- }
- if (!user){
- return done(null, false, req.flash('loginMessage', 'No user found.')); // req.flash is the way to set flashdata using connect-flash
- }
- if (!user.validPassword(password)){
- return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.')); // create the loginMessage and save it to session as flashdata
- }
- return done(null, user);
- });
- }));
- // ******************* FACEBOOK ******************
- passport.use(new FacebookStrategy({
- clientID : configAuth.facebookAuth.clientID,
- clientSecret : configAuth.facebookAuth.clientSecret,
- callbackURL : configAuth.facebookAuth.callbackURL,
- passReqToCallback : true
- },
- function(req, token, refreshToken, profile, done) {
- process.nextTick(function() {
- if (!req.user) {
- userCollection.findOne({ 'facebook.id' : profile.id }, function(err, user) {
- if (err){
- return done(err);
- }
- if (user) {
- return done(null, user);
- } else {
- var newUser = new User();
- newUser.facebook.id = profile.id;
- newUser.facebook.token = token;
- newUser.facebook.name = profile.name.givenName + ' ' + profile.name.familyName;
- newUser.facebook.email = profile.emails[0].value;
- newUser.facebook.photos = profile.photos;
- newUser.save(function(err) {
- if (err){
- throw err;
- }
- return done(null, newUser);
- });
- }
- });
- } else {
- var user = req.user;
- user.facebook.id = profile.id;
- user.facebook.token = token;
- user.facebook.name = profile.name.givenName + ' ' + profile.name.familyName;
- user.facebook.email = profile.emails[0].value;
- user.facebook.photos = profile.photos;
- user = _.create(User.prototype, user);
- user.save(function(err) {
- if (err){
- throw err;
- }
- return done(null, user);
- });
- }
- });
- }));
- // ********************* TWITTER **********************
- passport.use(new TwitterStrategy({
- consumerKey : configAuth.twitterAuth.consumerKey,
- consumerSecret : configAuth.twitterAuth.consumerSecret,
- callbackURL : configAuth.twitterAuth.callbackURL,
- passReqToCallback : true
- },
- function(req, token, tokenSecret, profile, done) {
- process.nextTick(function() {
- var user = req.user;
- user.twitter.id = profile.id;
- user.twitter.token = token;
- user.twitter.username = profile.username;
- user.twitter.displayName = profile.displayName;
- user.twitter.photos = profile.photos;
- user = _.create(User.prototype, user);
- user.save(function(err) {
- if (err){
- throw err;
- }
- return done(null, user);
- });
- });
- }));
- // ********************* INSTAGRAM **********************
- // passport.use(new InstagramStrategy({
- //
- // clientID : configAuth.instagramAuth.clientID,
- // clientSecret : configAuth.instagramAuth.clientSecret,
- // callbackURL : configAuth.instagramAuth.callbackURL,
- // passReqToCallback : true
- // },
- //
- // function(req, accessToken, refreshToken, profile, done) {
- //
- // process.nextTrick(function() {
- //
- // userCollection.findOrCreate({ 'instagramId': profile.id }, function (err, user) {
- // return done(err, user);
- // });
- //
- // });
- // }
- // ));
- passport.use(new InstagramStrategy({
- clientID : configAuth.instagramAuth.clientID,
- clientSecret : configAuth.instagramAuth.clientSecret,
- callbackURL : configAuth.instagramAuth.callbackURL,
- passReqToCallback : true
- },
- function(req, token, refreshToken, profile, done) {
- process.nextTick(function() {
- var user = req.user;
- user.instagram.id = profile.id;
- user.instagram.token = token;
- user.instagram.username = profile.username;
- user = _.create(User.prototype, user);
- user.save(function(err) {
- if (err){
- throw err;
- }
- return done(null, user);
- });
- });
- }));
- // ********************* MailChimp **********************
- passport.use(new MailChimpStrategy({
- clientID : configAuth.mailChimpAuth.clientID,
- clientSecret : configAuth.mailChimpAuth.clientSecret,
- callbackURL : configAuth.mailChimpAuth.callbackURL,
- passReqToCallback : true
- },
- function(req, token, refreshToken, profile, done) {
- process.nextTick(function() {
- var user = req.user;
- user.mailChimp.id = profile.id;
- user.mailChimp.token = token;
- user.mailChimp.username = profile.username;
- user = _.create(User.prototype, user);
- user.save(function(err) {
- if (err){
- throw err;
- }
- return done(null,user);
- });
- });
- }));
- };