Desafio feito:
function verificaTokenJWT(...role: Role[]) {
return async (req, res, next): Promise<any> => {
if (!req.headers.authorization) { throw new AppError('Nenhum token informado.', Status.FORBIDDEN) }
const tokenString: string[] = req.headers.authorization.split(' ')
const token = tokenString[1]
// Nenhuma token informado
if (!token) {
logger.error('Nenhum token informado')
throw new AppError('Nenhum token informado.', Status.FORBIDDEN)
}
// Verifica se o token é válido
await access.verifica(token)
// Verifica se o token é válido
jwt.verify(token, process.env.SECRET_JWT, function (err, decoded) {
if (err) {
logger.error('Falha ao autenticar o token. Token expirou')
throw new AppError('Falha ao autenticar o token. Token expirou', Status.FORBIDDEN)
}
if (role.length > 0 && !role.includes(decoded.role)) {
logger.error('Não autorizado')
throw new AppError('Não autorizado', Status.FORBIDDEN)
}
req.userId = decoded.id
req.userRole = decoded.role
next()
})
}
}