Vantagens de usar JWT
Uma das principais vantagens de usar JWT em comparação com outras técnicas de autenticação é sua natureza autocontida. Isso significa que os tokens contêm todas as informações necessárias para a autenticação, eliminando a necessidade de manter sessões no servidor. Outro benefício essencial é a sua compatibilidade com CORS, que é crucial ao desenvolver APIs que precisam ser acessíveis de diferentes domínios. Configurando o Ambiente Antes de começar, certifique-se de ter o Node.js instalado. Você precisará instalar algumas dependências: express, jsonwebtoken e bcrypt. Isso pode ser feito executando o seguinte comando:
$ npm install express jsonwebtoken bcrypt Estrutura Básica do Projeto
Você pode estruturar seu projeto como mostrado abaixo:
|-- src | |-- index.js |-- middlewares | |-- auth.js index.js será nosso ponto de entrada, enquanto auth.js lidará com as funções relacionadas à autenticação.
Criamos uma API básica
A seguir, criaremos uma API básica com Express:
// index.js const express = require(express); const app = express(); app.use(express.json()); app.get(/, (req, res) => { res.send(\"API funcionando!\"); }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(Servidor em execução na porta ${PORT}); }); Implementando JWT para Autenticação
Código Middleware auth.js
// auth.js const jwt = require(jsonwebtoken); const secretKey = my_secret_key; module.exports.authenticateToken = (req, res, next) => { const token = req.header(x-access-token); if (!token) return res.status(403).send(\"Acesso negado.\"); try { const verified = jwt.verify(token, secretKey); req.user = verified; next(); } catch (err) { res.status(401).send(\"Token inválido\"); } }; Aqui definimos um middleware simples que autentica a validade dos tokens passados nos cabeçalhos HTTP.
Manipulação de Usuários e Geração de Tokens
A seguir, implementamos as rotas para registrar usuários e gerar tokens:
// index.js const bcrypt = require(\"bcrypt\"); const jwt = require(\"jsonwebtoken\"); const users = []; app.post(\"/register\", async (req, res) => { try { const salt = await bcrypt.genSalt(10); const hashedPassword = await bcrypt.hash(req.body.password, salt); const user = { name: req.body.name, password: hashedPassword }; users.push(user); res.status(201).send(\"Usuário registrado!\"); } catch (err) { res.status(500).send(err.message); app.post(\"/login\", async (req, res) => { const user = users.find((user) => user.name === req.body.name); if (!user) return res.status(404).send(\"Usuário não encontrado\"); try { const validPassword = await bcrypt.compare(req.body.password, user.password); if (!validPassword) return res.status(400).send(\"Senha incorreta\"); const token = jwt.sign({ _id: user._id }, my_secret_key); res.header(\"x-access-token\", token).send(\"Login realizado com sucesso!\"); } catch (err) { res.status(500).send(err.message); } }); Adicionamos rotas para registro e login. Após o login bem-sucedido, um token JWT será gerado e retornado ao cliente.
Explore mais sobre tecnologia aqui
Comentarios
0Sé el primero en comentar