aboutsummaryrefslogblamecommitdiffstatshomepage
path: root/config/passport.js
blob: 95184093601a16a025126f8de128dca95aeea904 (plain) (tree)












































































































                                                                                                        
// dependencies
var mongoose = require('mongoose')
  , LocalStrategy = require('passport-local').Strategy
  , FacebookStrategy = require('passport-facebook').Strategy
  , TwitterStrategy = require('passport-twitter').Strategy
  , User = mongoose.model('User');

/**
 * This is where the magic happends
 */

module.exports = function (passport, config) {

    // serialize sessions
    passport.serializeUser( function(user, done) {
        done(null, user.id);
    });
    passport.deserializeUser( function(id, done) {
        User.findOne({ _id: id }, function(err, user) {
            done(err, user);
        });
    });


    /**
     * Local strategy
     */
    passport.use(new LocalStrategy({
        usernameField: 'email',
        passwordField: 'password'
    }, function(email, password, done) {

        // looks up the user in the database, and check if password matches
        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);
        });
    }));


    /**
     * Facebook strategy
     */
    passport.use(new FacebookStrategy({
        clientID: config.facebook.clientID
      , clientSecret: config.facebook.clientSecret
      , callbackURL: config.facebook.callbackURL
    }, function(accessToken, refreshToken, profile, done) {

        // looks up the user in the database. Will create the user if it does not exist
        User.findOne({ 'facebook.id': profile.id }, function(err, user) {
            if(err) return done(err);
            if (!user) {
                user = new User({
                    name: profile.displayName
                  , email: profile.emails[0].value
                  , username: profile.username
                  , provider: 'facebook'
                  , facebook: profile._json
                });
                user.save(function(err) {
                    if (err) console.log(err);
                    return done(err, user);
                });
            } else {
                return done(err, user);
            }
        });
    }));


    /**
     * Twitter strategy
     */
    passport.use(new TwitterStrategy({
        consumerKey: config.twitter.clientID
      , consumerSecret: config.twitter.clientSecret
      , callbackURL: config.twitter.callbackURL
    }, function(token, tokenSecret, profile, done) {

        // looks up the user in the database. Will create the user if it does not exist
        User.findOne({ 'twitter.id': profile.id }, function(err, user) {
            if (err) return done(err);
            if (!user) {
                user = new User({
                    name: profile.displayName
                  , username: profile.username
                  , provider: 'twitter'
                  , twitter: profile._json
                });
                user.save(function(err) {
                    if (err) console.log(err);
                    return done(err, user);
                });
            } else {
                return done(err, user);
            }
        });
    }));






}