node-express-mongodb-jwt-rest-api-skeleton
Version:
Node.js express.js MongoDB JWT REST API - This is a basic API REST skeleton written on JavaScript using async/await. Great for building a starter web API for your front-end (Android, iOS, Vue, react, angular, or anything that can consume an API)
41 lines (36 loc) • 1.12 kB
JavaScript
const { matchedData } = require('express-validator')
const {
findUser,
userIsBlocked,
checkLoginAttemptsAndBlockExpires,
passwordsDoNotMatch,
saveLoginAttemptsToDB,
saveUserAccessAndReturnToken
} = require('./helpers')
const { handleError } = require('../../middleware/utils')
const { checkPassword } = require('../../middleware/auth')
/**
* Login function called by route
* @param {Object} req - request object
* @param {Object} res - response object
*/
const login = async (req, res) => {
try {
const data = matchedData(req)
const user = await findUser(data.email)
await userIsBlocked(user)
await checkLoginAttemptsAndBlockExpires(user)
const isPasswordMatch = await checkPassword(data.password, user)
if (!isPasswordMatch) {
handleError(res, await passwordsDoNotMatch(user))
} else {
// all ok, register access and return token
user.loginAttempts = 0
await saveLoginAttemptsToDB(user)
res.status(200).json(await saveUserAccessAndReturnToken(req, user))
}
} catch (error) {
handleError(res, error)
}
}
module.exports = { login }