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??????????