Johnsoct
10/18/2017 - 9:22 PM

DEFAULT passport-facebook

Basic passport config for using the passport-facebook strategy

passport.use(new FacebookStrategy({
      clientID: process.env.FACEBOOK_APP_ID,
      clientSecret: process.env.FACEBOOK_APP_SECRET,
      callbackURL: `${process.env.FACEBOOK_CALLBACK_URL}`,
      profileFields: ['id', 'emails', 'name']
    },
    function(accessToken, refreshToken, profile, done) {
      console.log(profile);
      User.findOne({ email: profile.emails[0].value },
          function(err, user) {
            // handle immediate errors
            if (err) return catchErrors(err);
            // If a user with an email === google email, check for google.id
            if (user) {
              // if user's google schema info is undefined, set dat shit
              if (user.facebook.id === undefined) {
                user.facebook.id = profile.id;
                user.facebook.token = accessToken;
                user.facebook.email = profile.emails[0].value;
                user.facebook.name = profile.displayName;
              }
              if (user.name === undefined) {
                user.name = profile.givenName + profile.familyName;
              }
              user.save();
              return done(null, user);
            } else { // If no user exists with email === twitter email, create new User
              const user = new User();
              // local data
              user.name = profile.displayName;
              user.email = profile.emails[0].value;
              user.facebook.id = profile.id;
              user.facebook.token = accessToken;
              user.facebook.name = profile.displayName;
              user.facebook.email = profile.emails[0].value;
              console.log(user);
              user.save(function(err) {
                if (err) console.log(err);
                return done(err, user);
              });
            }
          }
      );
    }
));