Cursos / Informática para Internet / Plataformas de aplicações Web / Aula
O sistema Admin já tem um middleware chamado "requireAuth" criado anteriormente e responsável por restringir acesso às partes do sistema onde o administrador precisa está logado. Vamos criar um arquivo em "middlewares/requireJWT.js" com uma proposta similar, porém para ser utilizada nas rotas da API.
Os tokens JWT devem ser enviados em um atributo do header da requisições chamado "Authorization" e com o valor no formato: "Bearer TOKEN_JWT_AQUI". Repare que existe a palavra "Bearer" antes, seguida de um espaço e depois o token JWT. É assim que o valor do cabeçalho Authorization deve ser enviado nas requisições à API pelas aplicaçĩes.
O conteúdo do "middlewares/requireJWT.js" é:
const jwt = require('jsonwebtoken');
const segredoJWT = 'frase segredo para critografia do jwt';
module.exports = async (req, res, next) => {
// verifica se a sessão está vazia (deslogado)
if (!req.headers.authorization) {
return res.status(401).json({
message: 'Não autorizado'
});
}
try {
const token = req.headers.authorization.split(' ')[1];
const decodedJWT = jwt.verify(token, segredoJWT);
res.locals.jwt = decodedJWT;
next();
} catch (error) {
return res.status(401).json({
message: 'Token inválido'
});
}
}
O middleware requireJWT.js, como visto no código acima, realiza algumas verificações. A primeira é se o header authorization foi enviado, caso contrário ele retorna um json com status 401 e mensagem "Não autorizado".
Em seguida ele tenta remover o token do header authorization (que tem o "Bearer " antes) com o comando:
const token = req.headers.authorization.split(' ')[1];
Esse comando pega somente a segunda parte do authorization header, que é justamente o token JWT (ainda codificado).
Em seguida ele tenta decodificar o token com o segredo armazenado em uma variável. Esse token JWT decodificado na variável "decodedJWT" é então colocado em res.locals.jwt para que as requisições que dependem desse middleware tenha acesso aos dados presentes dentro do token de forma fácil e já decodificada. Os comandos para isso foram:
const decodedJWT = jwt.verify(token, segredoJWT);
res.locals.jwt = decodedJWT;
Repare que a biblioteca jsonwebtoken é usada aqui com o método jwt.verify que recebe o token codificado, o segredo e retorna o token decodificado (se o segredo estiver correto). Caso o segredo esteja incorreto, uma exceção de erro será disparada e capturada pelo catch.
Versão 5.3 - Todos os Direitos reservados