Source: config/passport-setup.js

/** Passport.js configuration setup module.
 * @module config/passport-setup
 */
'use strict';

/** Require module for passport js.
 * @requires passport
 */
const passport = require('passport');

/** Require module for passports google authentication.
 * @requires passport-google-oauth20
 */
const GoogleStrategy = require('passport-google-oauth20');

/** Require module for keys file.
 * @requires keys
 */
const keys = require('./keys');

/** Require module for user model file.
 * @requires user-model
 */
const User = require('../models/user-model');

/** Passport serialize user function.
 * @function serializeUser
 * @param {object} user - User object
 * @param {object} done - Done object
 */
passport.serializeUser((user, done)=> {
  done(null, user.id);
});

/** Passport deserialize user function.
 * @function deserializeUser
 * @param {object} id - User ID object
 * @param {object} done - Done object
 */
passport.deserializeUser((id,done)=> {
  User.findById(id).then((user)=> {
    done(null,user);
  });
});

/** Passport use function for google strategy.
 * @function use
 */
passport.use(
  new GoogleStrategy({
    /** Options for the google strategies. */
    callbackURL: '/auth/google/redirect',
    clientID: keys.google.clientID,
    clientSecret: keys.google.clientSecret,
    }, (accessToken, refreshToken, profile, done)=> {
        /** Passport callback function. */
        User.findOne({
            googleId: profile.id
        }).then((currentUser) => {
            if(currentUser){
                /** User exists. */
                User.update({googleId: profile.id},{googleToken : accessToken},function(err, obj) {
                    if (err){
                      throw err;
                    }else{
                      console.log("Token updated");
                    }});
                console.log('user already exists', currentUser);
                done(null,currentUser);
            }else{
                /** Create User. */
                new User({
                    userName: profile.displayName,
                    googleId: profile.id,
                    googleToken: accessToken,
                    googleRefresh: refreshToken
                }).save().then((newUser) => {
                    console.log('new user was created' +newUser);
                    done(null, newUser);
                });
            }
        });
      })
)