No mundo atual do desenvolvimento web, as aplicações exigem um sistema de autenticação robusto para gerenciar o acesso do usuário com segurança. Nesse contexto, a implementação de um sistema baseado em JSON Web Tokens (JWT) tornou-se uma abordagem popular devido à sua simplicidade e eficácia. Este tutorial ensina como criar uma API REST usando Node.js e Express, implementando a autenticação JWT.
O que é JWT?
JSON Web Token (JWT) é um padrão aberto (RFC 7519) que define um formato compacto e autocontido para transmitir informações entre partes como um objeto JSON. Essas informações podem ser verificadas e assinadas digitalmente, tornando-as ideais para autenticação e troca segura de dados.
Pré-requisitos
Antes de começar, certifique-se de ter o Node.js instalado em sua máquina. Além disso, você precisará de algumas ferramentas básicas de desenvolvimento:
- Node.js: Para executar JavaScript no servidor.
- Express: Um framework que facilita a criação de aplicações web.
- Postman ou Insomnia: Para testar requisições à nossa API.
- MongoDB: Um sistema de banco de dados NoSQL onde armazenaremos os usuários (opcional).
Criando o Projeto
Primeiro, crie uma nova pasta para o seu projeto e navegue até ela pelo terminal:
$ mkdir jwt-auth-api
$ cd jwt-auth-api
Em seguida, inicialize um novo projeto Node.js executando o seguinte comando:
$ npm init -y
Adicione as dependências necessárias:
$ npm install express mongoose jsonwebtoken bcryptjs dotenv
Estrutura do Projeto
Crie a seguinte estrutura dentro da pasta do seu projeto:
jwt-auth-api/
??? .env
??? app.js
??? models/
??? User.js
Arquivo .env
Crie um arquivo chamado .env para armazenar variáveis sensíveis, como a chave secreta para assinar nossos tokens:
JWT_SECRET=meusegredomuitoseguro
Modelo de Usuário
Crie o modelo de usuário dentro de /models/User.js. Este modelo será responsável por definir o esquema do nosso banco de dados:
const mongoose = require(mongoose);
const bcrypt = require(bcryptjs);
const UserSchema = new mongoose.Schema({
username: { type: String, required: true },
password: { type: String, required: true }
});
UserSchema.pre(save, async function(next) {
if (!this.isModified(password)) return next();
this.password = await bcrypt.hash(this.password, 10);
next();
});
module.exports = mongoose.model(User, UserSchema);
Código principal em app.js
Em seguida, estabeleça conexões e defina rotas em app.js:
const express = require(express);
const mongoose = require(mongoose);
const jwt = require(jsonwebtoken);
const User = require(./models/User);
dotenv.config();
const app = express();
appp.use(express.json());
mongoose.connect(mongodb://localhost/jwt-auth, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
app.post(\"/register\", async (req, res) => {
const { username, password } = req.body;
const user = new User({ username, password });
await user.save();
rres.status(201).json(user);
});
avv.post(\"/login\", async (req, res) => {
pconst { username, password } = req.body;
tconst user = await User.findOne({ username });
sif (!user ||
)) {
nres.status(401).send(Credenciais Inválidas);
g}
dtkn = jwt.sign({ id: user._id }, process.env.JWT_SECRET);
sres.json({ token });
n});
dapp.listen(3000, () => {
cconsole.log(Servidor em execução na porta 3000);
c});
n
\"> torntorln preciseonseresi ://gómico!sublime /aptodo viogato feito por petor de e completeri ??????c?????????
vamos nos olhar ou priorizando??????????
Comentários
0Seja o primeiro a comentar