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)
48 lines (43 loc) • 1.13 kB
JavaScript
const passport = require('passport')
const User = require('../app/models/user')
const auth = require('../app/middleware/auth')
const JwtStrategy = require('passport-jwt').Strategy
/**
* Extracts token from: header, body or query
* @param {Object} req - request object
* @returns {string} token - decrypted token
*/
const jwtExtractor = (req) => {
let token = null
if (req.headers.authorization) {
token = req.headers.authorization.replace('Bearer ', '').trim()
} else if (req.body.token) {
token = req.body.token.trim()
} else if (req.query.token) {
token = req.query.token.trim()
}
if (token) {
// Decrypts token
token = auth.decrypt(token)
}
return token
}
/**
* Options object for jwt middlware
*/
const jwtOptions = {
jwtFromRequest: jwtExtractor,
secretOrKey: process.env.JWT_SECRET
}
/**
* Login with JWT middleware
*/
const jwtLogin = new JwtStrategy(jwtOptions, (payload, done) => {
User.findById(payload.data._id, (err, user) => {
if (err) {
return done(err, false)
}
return !user ? done(null, false) : done(null, user)
})
})
passport.use(jwtLogin)