Leodario.com

Leodario.com – Tudo sobre Tecnologia

Aula 41 – API JavaScript, Node.js e Express – Session Management – express-session

Imagem destacada da aula de API

Introdução (3 min)

Imagine um restaurante. Você faz seu pedido ao garçom, ele anota e o leva para a cozinha. Sem um sistema para rastrear qual pedido pertence a qual mesa, haveria um caos completo. O session management em APIs funciona de maneira semelhante: permite que o servidor “lembre” quem é o usuário durante uma série de requisições, sem exigir que ele se autentique repetidamente. É vital para APIs modernas que lidam com logins, carrinhos de compra e personalização. Nesta aula, vamos implementar gerenciamento de sessões usando o popular middleware express-session em Node.js/Express.

No contexto Node.js/Express, express-session nos ajuda a criar e gerenciar essas sessões de usuário, armazenando informações no servidor e fornecendo um mecanismo para rastreá-las através de um cookie no cliente.

Conceito Fundamental (7 min)

Session management, ou gerenciamento de sessões, é o processo pelo qual um servidor web mantém o estado de um usuário durante uma série de requisições HTTP. Em termos mais simples, é como o servidor “lembra” quem é o usuário. Isso é fundamental para funcionalidades como logins, carrinhos de compra e personalização da experiência do usuário.

A terminologia chave aqui inclui sessão, que representa o estado do usuário, e cookie de sessão, um pequeno pedaço de dado armazenado no navegador do cliente que contém um identificador único da sessão. Casos de uso em produção incluem autenticação de usuários em redes sociais, armazenamento de itens em carrinhos de e-commerce e recomendações personalizadas em plataformas de streaming.

express-session se integra com outros middlewares e tecnologias, como bancos de dados para persistir sessões e sistemas de autenticação. Suas vantagens incluem a manutenção do estado do usuário sem exigir autenticação repetida. A desvantagem é o overhead de armazenamento e gerenciamento das sessões no servidor.

Implementação Prática (10 min)

const express = require('express');
const session = require('express-session');

const app = express();

// Configuração do express-session (compatível com HostGator Plano M) app.use(session({ secret: 'sua_chave_secreta_aqui', // MUITO IMPORTANTE: trocar por uma chave forte e aleatória em produção! resave: false, // Não salvar a sessão se não foi modificada saveUninitialized: false, // Não salvar sessões vazias cookie: { secure: false, // Configurar como 'true' se usar HTTPS em produção maxAge: 24 60 60 * 1000 // Tempo de vida do cookie (24 horas) } }));

// Rota de login (exemplo) app.post('/login', (req, res) => { // ... lógica de autenticação ... if (autenticado) { req.session.usuario = { id: 123, nome: 'João' }; // Armazena dados na sessão res.send('Login realizado com sucesso!'); } else { res.status(401).send('Login falhou'); } });

// Rota protegida (exemplo) app.get('/perfil', (req, res) => { if (req.session.usuario) { res.send(Bem-vindo, ${req.session.usuario.nome}!); } else { res.redirect('/login'); // Redireciona para o login se não estiver autenticado } });

// Inicia o servidor const port = process.env.PORT || 3000; app.listen(port, () => { console.log(Servidor rodando na porta ${port}); });

npm install express express-session
node seu_arquivo.js

Exercício Hands-On (5 min)

Desafio: Crie uma rota /logout que encerre a sessão do usuário.

Solução:

app.get('/logout', (req, res) => {
  req.session.destroy((err) => { // Destrói a sessão
    if (err) {
      console.error("Erro ao destruir a sessão:", err);
      res.status(500).send('Erro ao fazer logout');
    } else {
      res.redirect('/'); // Redireciona para a página inicial após o logout
    }
  });
});

Teste: Faça login, acesse a rota /perfil e depois /logout. Verifique se você é redirecionado para o login após o logout.

Troubleshooting: Se a sessão não estiver sendo destruída, verifique se a configuração do express-session está correta, especialmente a secret. Certifique-se também de que o cookie de sessão está sendo enviado corretamente pelo navegador.

Próximos passos: Explore opções de armazenamento persistente de sessões, como bancos de dados, para maior escalabilidade e confiabilidade. Considere também implementar middlewares para proteger rotas com base nas informações da sessão.

🚀 Pronto para a próxima aula?

Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!

📚 Ver todas as aulas