facebookCallback: function(req, res) {
    'use strict';

    var params = req.params.all();

    Facebook.getAccessToken({
      appId: facebookAuth.clientID,
      appSecret: facebookAuth.clientSecret,
      code: params.code,
      callbackUrl: sails.config.appsettings.BASE_URL + '/login/facebook/callback'
    }).exec({
      error: function(err) {},
      success: function(result) {
        var token = result.token;

        // Get information about the Facebook user with the specified access token.
        Facebook.getUserByAccessToken({
          accessToken: token
        }).exec({
          error: function(err) {},

          success: function(result) {
            // Result will include the user's profile information for consumption.
          }

        });
      }
    });
  },
  facebookCallback: function(req, res) {
  var code = req.params.all()['code'];

  Facebook.getAccessToken({
    appId: fbClientId,
    appSecret: fbSecret,
    code: code,
    callbackUrl: callbackUrl
  }).exec({
    error: function(err) { },
    success: function(result) {
      var token = result.token;

      // Get information about the Facebook user with the specified access token.
      Facebook.getUserByAccessToken({
        accessToken: token
      }).exec({
        error: function(err) { },

        success: function(result) {
          // Result will include the user's profile information for consumption.
        }

      });
    }
  });
},
  facebookCallback: function(req, res) {
    'use strict';

    var params = req.params.all();

    Facebook.getAccessToken({
      appId: facebookAuth.clientID,
      appSecret: facebookAuth.clientSecret,
      code: params.code,
      callbackUrl: sails.config.appsettings.BASE_URL + '/login/facebook/callback'
    }).exec({

      error: function(err) {
        sails.log.error(err);
        return res.serverError(err);
      },

      success: function(result) {
        var token = result.token;

        Facebook.getUserByAccessToken({
          accessToken: token
        }).exec({

          error: function(err) {
            sails.log.error(err);
            return res.serverError(err);
          },

          success: function(result) {
            console.log(result);
            User.findOne({
              or: [{
                facebookId: result.id
              }, {
                email: result.email
              }]
            }).exec(function(err, user) {
              if (user) {
                User.update(user, {lastLoggedIn: Date(Date.now(), function(err, loggedInUser) {

                  if (err) {
                    sails.log.error(err);
                    return res.serverError(err);
                  }

                  return res.json(loggedInUser);
                })});
              } else {
                
                // Create a new user and log the user in
              }
            });
          }

        });
      }
    });
  },
  facebookCallback: function(req, res) {
    'use strict';
    var params = req.params.all();
    var code = params.code;

    Facebook.getAccessToken({
      appId: facebookAuth.clientID,
      appSecret: facebookAuth.clientSecret,
      code: code,
      callbackUrl: facebookCallbackUrl
    }).exec({
      error: function(err) {
        if (err) {
          sails.log.error(err);
          res.serverError();
        }
      },
      success: function(result) {
        var token = result.token;
        console.log('token result', result);

        // Get information about the Facebook user with the specified access token.
        Facebook.getUserByAccessToken({
          accessToken: token
        }).exec({
          error: function(err) {
            if (err) {
              sails.log.error(err);
              res.serverError();
            }
          },

          success: function(result) {
            console.log('user result', result);
            User.findOne({
              or: [{
                facebookId: result.id
              }, {
                email: result.email
              }]
            }).exec(function(err, user) {
              if (user) {
                console.log(user);
                // Update the last logged in date/time stamp and log the user in
                res.ok();

              } else {
                console.log('NOuser');
                res.ok();
                // Create a new user and log the user in
              }
            });
          }

        });
      }
    });
  },
  facebookCallback: function(req, res) {
    var code = req.params.all()['code'];

    Facebook.getAccessToken({
      appId: facebookAuth.clientID,
      appSecret: facebookAuth.clientSecret,
      code: code,
      callbackUrl: facebookCallbackUrl
    }).exec({
      error: function(err) {},
      success: function(result) {
        var token = result.token;

        // Get information about the Facebook user with the specified access token.
        Facebook.getUserByAccessToken({
          accessToken: token
        }).exec({
          error: function(err) {},

          success: function(result) {
            User.findOne({
              or: [{
                facebookId: result.id
              }, {
                email: result.email
              }]
            }).exec(function(err, user) {
              if (user) {
                console.log(user);
                // Update the last logged in date/time stamp and log the user in
              } else {
                // Create a new user and log the user in
              }
            });
          }

        });
      }
    });
  },
  facebookCallback: function(req, res) {
    'use strict';

    var params = req.params.all();

    Facebook.getAccessToken({
      appId: facebookAuth.clientID,
      appSecret: facebookAuth.clientSecret,
      code: params.code,
      callbackUrl: sails.config.appsettings.BASE_URL + '/login/facebook/callback'
    }).exec({

      error: function(err) {
        sails.log.error(err);
        return res.serverError(err);
      },

      success: function(result) {
        var token = result.token;

        Facebook.getUserByAccessToken({
          accessToken: token
        }).exec({

          error: function(err) {
            sails.log.error(err);
            return res.serverError(err);
          },

          success: function(result) {
            console.log(result);
            User.findOne({
              or: [{
                facebookId: result.id
              }, {
                email: result.email
              }]
            }).exec(function(err, user) {
              if (user) {
                var criteria = {
                  lastLoggedIn: Date(Date.now())
                };
                User.update(user, criteria, function(err, loggedInUser) {

                  if (err) {
                    sails.log.error(err);
                    return res.serverError(err);
                  }

                  passport.authenticate('socialAuth', function(err, loggedInUser) {
                    if (err) {
                      sails.log.error(err);
                      return res.serverError(err);
                    }
                    req.logIn(loggedInUser, function(err) {
                        if (err) {
                          sails.log.error(err);
                          return res.serverError(err);
                        }
                        return res.redirect('/users/bla');
                      });
                  })(req, res);

                });
              } else {
                var newUser = {
                  facebookId: result.id ,
                  email: result.email || undefined,
                  firstName: result.first_name || undefined,
                  gender: result.gender || undefined,
                  lastName: result.last_name || undefined ,
                  link: result.link || undefined,
                  locale: result.locale || undefined,
                  name: result.name || undefined,
                  timezone: result.timezone || undefined
                };

                User.create(newUser, function(err, newUserResult) {
                  if (err) {
                    sails.log.error(err);
                    return res.serverError(err);
                  }

                  passport.authenticate('facebook', function(err, newUserResult, info) {
                    if (err) {
                      sails.log.error(err);
                      return res.serverError(err);
                    }
                    req.logIn(newUserResult, function(err) {
                        if (err) {
                          sails.log.error(err);
                          return res.serverError(err);
                        }
                        return res.redirect('/users/bla');
                      });
                  })(req, res);
                });
              }
            });
          }

        });
      }
    });
  },
  facebookCallback: function(req, res) {
    'use strict';
    var params = req.params.all();
    var code = params.code;

    Facebook.getAccessToken({
      appId: facebookAuth.clientID,
      appSecret: facebookAuth.clientSecret,
      code: code,
      callbackUrl: facebookCallbackUrl
    }).exec({
      error: function(err) {
        if (err) {
          sails.log.error(err);
          res.serverError();
        }
      },

      success: function(result) {
        var token = result.token;
        sails.log.debug('token result', result);

        // Get information about the Facebook user with the specified access token.
        Facebook.getUserByAccessToken({
          accessToken: token
        }).exec({
          error: function(err) {
            if (err) {
              sails.log.error(err);
              res.serverError();
            }
          },

          success: function(result) {
            console.log('getUserByAccessToken result', result);
            User.findOne({
              or: [
                {facebookId: result.id},
                {email: result.email}
              ]
            }).exec(function(err, dbUser) {
              if (dbUser) {
                req.body = dbUser;
                authenticateFacebook(req, res);
              } else {
                console.log('NOuser');
                // jscs:disable requireCamelCaseOrUpperCaseIdentifiers
                var newUser = {
                  facebookId: result.id,
                  email: result.email,
                  firstName: result.first_name, /* jshint ignore:line */
                  lastName: result.last_name, /* jshint ignore:line */
                  fullName: result.name,
                  timezone: result.timezone
                };
                // jscs:enable requireCamelCaseOrUpperCaseIdentifiers
                User.create(newUser, function(err, dbUser) {
                  if (err) {
                    sails.log.error(err);
                    res.serverError();
                  }

                  req.body = dbUser;
                  authenticateFacebook(req, res);
                });
              }
            });
          }
        });
      }
    });
  },
  facebookCallback: function(req, res) {
    'use strict';
    var params = req.params.all();
    var code = params.code;

    Facebook.getAccessToken({
      appId: facebookAuth.clientID,
      appSecret: facebookAuth.clientSecret,
      code: code,
      callbackUrl: facebookCallbackUrl
    }).exec({
      error: function(err) {
        if (err) {
          sails.log.error(err);
          res.serverError();
        }
      },

      success: function(result) {
        var token = result.token;
        sails.log.debug('token result', result);

        // Get information about the Facebook user with the specified access token.
        Facebook.getUserByAccessToken({
          accessToken: token
        }).exec({
          error: function(err) {
            if (err) {
              sails.log.error(err);
              res.serverError();
            }
          },

          success: function(result) {
            console.log('getUserByAccessToken result', result);
            User.findOne({
              or: [
                {facebookId: result.id},
                {email: result.email}
              ]
            }).exec(function(err, dbUser) {
              if (dbUser) {
                req.body = dbUser;

                passport.authenticate('custom-facebook', function(err, user, info) {

                  if ((err) || (!user)) {
                    sails.log.error(info);
                    return res.forbidden();
                  }

                  req.logIn(user, function(err) {
                    if (err) {
                      sails.log.error(err);
                      res.serverError();
                    }

                    req.session.authenticated = true;
                    req.session.userId = user.id;

                    sails.log.debug('facelogin req session', req.session);
                    sails.log.info('user', user, 'authenticated successfully');

                    return res.send({
                      message: info,
                      user: user
                    });
                  });
                })(req);

              } else {
                console.log('NOuser');
                var newUser = {
                  facebookId: result.id,
                  email: result.email,
                  firstName: result.first_name,
                  lastName: result.last_name,
                  fullName: result.name,
                  timezone: result.timezone
                };
                User.create(newUser, function(err, dbUser) {
                  if (err) {
                    sails.log.error(err);
                    res.serverError();
                  }

                  req.body = dbUser;

                  passport.authenticate('custom-facebook', function(err, user, info) {

                    if ((err) || (!user)) {
                      sails.log.error(info);
                      return res.forbidden();
                    }

                    req.logIn(user, function(err) {
                      if (err) {
                        sails.log.error(err);
                        res.serverError();
                      }

                      req.session.authenticated = true;
                      req.session.userId = user.id;

                      sails.log.debug('facelogin req session', req.session);
                      sails.log.info('user', user, 'authenticated successfully');

                      return res.send({
                        message: info,
                        user: user
                      });
                    });
                  })(req);
                });
              }
            });
          }
        });
      }
    });
  },
  facebookCallback: function(req, res) {
    'use strict';

    var params = req.params.all();

    Facebook.getAccessToken({
      appId: facebookAuth.clientID,
      appSecret: facebookAuth.clientSecret,
      code: params.code,
      callbackUrl: sails.config.appsettings.BASE_URL + '/login/facebook/callback'
    }).exec({

      error: function(err) {
        sails.log.error(err);
        return res.serverError(err);
      },

      success: function(result) {
        var token = result.token;

        Facebook.getUserByAccessToken({
          accessToken: token
        }).exec({

          error: function(err) {
            sails.log.error(err);
            return res.serverError(err);
          },

          success: function(result) {
            console.log(result);
            User.findOne({
              or: [{
                facebookId: result.id
              }, {
                email: result.email
              }]
            }).exec(function(err, user) {
              if (user) {
                var criteria = {
                  lastLoggedIn: Date(Date.now())
                };
                User.update(user, criteria, function(err, loggedInUser) {

                  if (err) {
                    sails.log.error(err);
                    return res.serverError(err);
                  }

                  req.logIn(user, function(err) {

                    if (err) {
                      sails.log.error(err);
                      return res.serverError(err);
                    }

                    return res.json(loggedInUser);
                  });

                });
              } else {
                var newUser = {
                  facebookId: '7653384',
                  email: '*****@*****.**',
                  first_name: 'Brendan',
                  gender: 'female',
                  last_name: 'Eich',
                  link: 'http://www.facebook.com/7653384',
                  locale: 'en_US',
                  name: 'Brendan Eich',
                  timezone: -6,
                  updated_time: '2014-08-16T12:07:43+0000',
                  verified: true
                };
              }
            });
          }

        });
      }
    });
  },