Source: controllers/authcontroller.js

/** Module providing user implementation for routes
 * @module controllers/authcontroller
 */
const mongoose = require("mongoose");
const passport = require("passport");
const User = require("../models/user");

const userController = {};

/**
 * functionality for registration
 * @name doRegister
 * @function
 * @alias module:/controllers/authcontroller
 * @property {request} request - contains username and password
 * @returns {string} response - whether or not registration was completed
 */
userController.doRegister = function (req, res) {
  if (req.body.usertype == "JobSeekerProfile") {
    User.register(
      new User({ email: req.body.email, type: req.body.usertype }),
      req.body.password,
      function (err, user) {
        if (err) {
          if (err.name == "UserExistsError") {
            err.message = "A user with the given email is already registered";
            res.status(400).send(err);
            return;
          }
          res.status(400).send(err);
          return;
        }

        passport.authenticate("local")(req, res, function () {
          res.status(200).send("Successfully created Job Seeker user");
        });
      }
    );
  } else if (req.body.usertype == "EmployerProfile") {
    User.register(
      new User({ email: req.body.email, type: req.body.usertype }),
      req.body.password,
      async function (err, user) {
        if (err) {
          if (err.name == "UserExistsError") {
            err.message = "A user with the given email is already registered";
            res.status(400).send(err);
            return;
          }
          res.status(400).send(err);
          return;
        }
        let profile = await user.getProfile();
        await profile.setOrganization(req.body.organization);
        passport.authenticate("local")(req, res, function () {
          res.status(200).send("Successfully created Employer user");
        });
      }
    );
  } else if (req.body.usertype == "EducatorProfile") {
    User.register(
      new User({ email: req.body.email, type: req.body.usertype }),
      req.body.password,
      async function (err, user) {
        if (err) {
          if (err.name == "UserExistsError") {
            err.message = "A user with the given email is already registered";
            res.status(400).send(err);
            return;
          }
          res.status(400).send(err);
          return;
        }
        let profile = await user.getProfile();
        await profile.setOrganization(req.body.organization);
        passport.authenticate("local")(req, res, function () {
          res.status(200).send("Successfully created Educator user");
        });
      }
    );
  } else {
    res.status(400).send("Invalid usertype");
  }
};

/**
 * functionality for login
 * @name doLogin
 * @function
 * @alias module:/controllers/authcontroller
 * @property {request} request - contains username and password
 * @returns {string} response - the user on successful login
 */
userController.doLogin = function (req, res) {
  //converts email to lowercase
  if (typeof req.body.email !== "undefined") {
    req.body.email = req.body.email.toLowerCase();
  }
  passport.authenticate("local")(req, res, function () {
    res.send(req.user.type);
  });
};

/**
 * functionality for logout
 * @name logout
 * @function
 * @alias module:/controllers/authcontroller
 * @property {request} request - request to server
 * @returns {string} response - the session is closed for the user
 */
userController.logout = function (req, res) {
  req.logout();
  res.status(200).send("Successfully logged out");
};

module.exports = userController;