You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
934 B
JavaScript

import jwt from 'jsonwebtoken'
import User from '../models/userModel.js'
import asyncHandler from './asyncHandler.js'
const authenticate = asyncHandler(async(req, res, next) => {
let token
// Read JWT from the 'jwt' cookie
token = req.cookies.jwt
if(token) {
try{
const decoded = jwt.verify(token, process.env.JWT_SECRET)
req.user = await User.findById(decoded.userId).select('-password')
next()
} catch(error){
res.status(401)
throw new Error("Not authorized, token failed.")
}
} else {
res.status(401)
throw new Error("Not authorized, no token.")
}
})
// Check if user is admin
const authorizeAdmin = (req, res, next) => {
if(req.user.isAdmin){
next()
} else {
res.status(401).send("Not authorized as an admin.")
}
}
export { authenticate, authorizeAdmin }