const passport = require('passport'); const FacebookStrategy = require('passport-facebook').Strategy; const config = require('../../config'); const User = require('../../models/user'); module.exports = function(passport) { passport.use('facebook', new FacebookStrategy( { clientID: config.services.facebook.appId, clientSecret: config.services.facebook.appSecret, callbackURL: 'http://localhost:3001/auth/facebook/loggedin', profileFields: ['id', 'email', 'first_name', 'last_name', 'picture'], }, (accessToken, refreshToken, profile, done) => { const { email, first_name: firstName, id: userId, last_name: lastName, picture: { data: { url = null } = {} } = {}, } = profile._json; const avatar = url; User.findOneAndUpdateOrCreate( { email, }, { accessToken, associatedEmail: email, method: profile.provider, userId, }, { avatar, email, firstName, lastName, }, (err, user) => { return done(err, user, { accessToken, refreshToken }); } ); } )); passport.use('facebookLink', new FacebookStrategy( { clientID: config.services.facebook.appId, clientSecret: config.services.facebook.appSecret, callbackURL: 'http://localhost:3001/auth/facebook/linked', profileFields: ['id', 'email', 'first_name', 'last_name', 'picture'], }, (accessToken, refreshToken, profile, done) => { const { email, first_name: firstName, id: userId, last_name: lastName, picture: { data: { url = null } = {} } = {}, } = profile._json; const avatar = url; const strategy = { accessToken, associatedEmail: email, method: profile.provider, userId, }; return done(null, { avatar, strategy }); } )); };