🚀 Capítulo 08: Que a Força esteja com você (Tema: Star Wars)

NOTE

Este capítulo utiliza a temática de Star Wars para explicar Middlewares e Autenticação (JWT). Use a Força para proteger as rotas secretas do seu servidor contra invasores!


1. 🎯 Objetivo da Aula

Compreender o que é um Middleware no Express, a diferença entre Autenticação e Autorização, e como usar tokens JWT (JSON Web Token) para proteger rotas restritas.

2. 🏢 O Cenário Prático (Seu Desafio)

No universo Star Wars, a Força é um campo de energia que envolve todas as coisas e pode ser usada pelos cavaleiros Jedi para proteger a galáxia. Para entrar no Templo Jedi em Coruscant e acessar os arquivos secretos, você não pode ser qualquer pessoa. Você precisa provar que é um Jedi digno, passando pelos guardas e portões de segurança. Se você não tiver a permissão (ou não souber usar a Força), você não entra!

No nosso servidor Express, qualquer pessoa do mundo na internet pode tentar acessar as nossas rotas.

  • Como fazemos para proteger rotas secretas (como a rota que deleta um produto ou a que vê os dados financeiros da empresa)?
  • Nós usamos os Middlewares e os Tokens JWT!
  • Um Middleware funciona como o guarda na porta do templo: ele para a requisição no meio do caminho, verifica se a pessoa tem o “crachá” certo e só então deixa ela passar! Seu desafio é proteger o templo!

🧠 Fundamentos: A Teoria Traduzida

🛡️ 1. O que é um Middleware?

No Express, um middleware é uma função que roda no meio do caminho, entre o momento que a requisição do usuário chega e o momento em que o servidor envia a resposta final.

  • Ele serve para fazer checagens. Exemplo: “Esse usuário está logado?“. Se sim, o middleware chama a função next() e a requisição continua. Se não, ele bloqueia e manda uma mensagem de erro na hora!

🎫 2. O que é JWT (JSON Web Token)?

É o “crachá digital” mais usado na internet hoje em dia.

  • Quando o usuário faz login digitando a senha correta, o servidor gera um texto gigante criptografado (o Token JWT) e entrega para o usuário.
  • Nas próximas vezes que o usuário quiser acessar uma rota protegida, ele não precisa enviar a senha de novo! Ele apenas envia esse Token. O servidor lê o token, vê que é válido e autoriza o acesso.

4. 📖 Exemplo Guiado: Criando o Guarda do Templo

Veja como criar um middleware simples de proteção no Express:

// Este é o nosso guarda (Middleware)
const verificarSeEhJedi = (req, res, next) => {
    const temSifraoNaMao = req.headers.token; // Busca o token
    
    if (temSifraoNaMao === "sou-um-jedi") {
        next(); // Permissão concedida! Vá para a rota.
    } else {
        res.status(401).send("Acesso Negado! Você não é um Jedi.");
    }
};
 
// Rota protegida pelo guarda!
app.get('/arquivos-secretos', verificarSeEhJedi, (req, res) => {
    res.send("Bem-vindo ao arquivo secreto do Templo Jedi!");
});

5. 🛠️ Prática Obrigatória 1: Autenticação vs Autorização

Baseando-se no mundo real, diga se as situações abaixo são exemplos de Autenticação (provar quem você é) ou Autorização (provar o que você pode fazer):

  1. Você digita o seu e-mail e senha no site para provar que a conta é sua.
  2. O sistema verifica se a sua conta é do tipo “Administrador” para permitir que você delete outro usuário.

6. 🛠️ Prática Obrigatória 2: O papel do Next()

  1. No exemplo guiado do middleware, para que serve o comando next()? O que aconteceria com a requisição do usuário se o nosso código não chamasse esse comando?

7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 08 FS_Forca) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

proj_aplicacoes_full_stack/
├── capitulos/
│   ├── capitulo_08_forca.md
│   └── codigos/
│       └── cap08/
│           └── middleware_auth.js

💡 Checkpoint de Lógica

Os tokens JWT têm data de validade! Você pode configurá-los para expirar em hora ou dia por motivos de segurança, forçando o usuário a fazer login novamente!

10. 🔥 Desafio de Fixação

Pesquise como instalar a biblioteca jsonwebtoken no Node.js usando o comando npm.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. Autenticação (Identificação).
  2. Autorização (Permissão de acesso). Gabarito da Prática 2:
  3. O comando next() serve para passar a vez para a próxima função/rota. Se você não chamá-lo, a requisição do usuário ficará “travada” infinitamente no navegador, esperando por uma resposta que nunca vai chegar!

Capitulo Anterior | Proximo Capitulo