DEV Community

Vinicius Alves Sousa
Vinicius Alves Sousa

Posted on

Como proteger rotas com JWT no Node.js

Apresentação

Olá me chamo Vinicius e sou um estudante de Ciência da Computação na PUC Minas, apaixonado por desenvolvimento web.
Tenho experiência prática com MongoDB, PostgreSQL, Express, React e autenticação com JWT, adquirida por meio de projetos pessoais e estudos aplicados.
Apesar de ainda não ter atuado profissionalmente, venho me dedicando a construir soluções completas — do backend ao frontend — com foco em boas práticas e segurança.

Estou há alguns dias estudando sobre autenticação com JWT e pensei, porque não escrever um artigo simples e direto sobre o tema.

Índice

  1. O que é autenticação?
  2. Dependências iniciais
  3. O que é hash?
  4. Como funcionam as funções hash para armazenar as senhas?
  5. O que é JWT?
  6. O que são tokens?
  7. Criando servidor
  8. Configurando a conexão com o MongoDB
  9. Criando um modelo de usuário
  10. Implementando o registro e login de usuário e criando um token JWT
  11. Middleware para impedir duplicação de e-mail e nome de usuário
  12. Middleware para verificar o token JWT
  13. Rotas

1. O que é autenticação

De maneira bem simples, a autenticação é uma forma de reconhecer a validade de algo. Para isso, é fornecido um conjunto de credenciais, como e-mail, nome de usuário e senha. Após isso, sempre que se quiser ter acesso ao objeto protegido, verifica-se a validade dessas informações. Caso sejam válidas, o usuário tem acesso a essas informações.

2. Dependências iniciais

npm install express mongoose jsonwebtoken bcryptjs dotenv 
Enter fullscreen mode Exit fullscreen mode

Express: um framework para Node.js muito útil para a criação de APIs de forma simples, rápida e organizada.

Mongoose: uma ferramenta para criação de modelos de objetos MongoDB

bcryptjs: uma biblioteca para senhas hash

jsonwebtoken: uma biblioteca para trabalhar com JWTs

dotenv: uma biblioteca que permite carregar variáveis de ambiente

3. O que é hash?

Hash nada mais é do que uma mudança ou uma transformação, que pega qualquer informação (dados fornecidos), como texto, senhas, arquivos, e gera um código fixo, curto e único. Algumas observações sobre hash abaixo

  • Qualquer mínima alteração nos dados fornecidos altera a senha gerada
  • A senha hash não pode ser revertida

4. Como funcionam as funções hash para armazenar as senhas?

Vou explicar com um exemplo bem simples e cotidiano como funciona o hash para armazenar senhas.

Vamos supor que você está fazendo o cadastro em um novo sistema de streaming de filmes e séries. Ao fornecer suas credenciais, como nome de usuário, e-mail e senha, essas informações são salvas em um banco de dados. No entanto, seria extremamente inseguro se a sua senha fosse armazenada no banco exatamente como você a forneceu — tanto por risco de ataques de hackers quanto por funcionários mal-intencionados.Por isso, quando você fornece sua senha durante o cadastro, antes de ela ser salva, é aplicado um hash (ou seja, uma transformação dos dados da senha). Só então a senha transformada é salva no banco de dados.

Após isso, quando o usuário tenta fazer login, a senha informada é transformada novamente e comparada com o hash armazenado. Se estiver tudo correto, o login é realizado com sucesso.

5. O que é JWT

JWT é uma forma simples e segura de representar declarações que podem ser transmitidas entre duas partes, geralmente através de uma URL, de forma compacta e verificável. Essas declarações são codificadas como objetos JSON. Durante o login, o JWT gera um token de acesso que permite verificar se o usuário está autenticado e tem permissão para acessar determinado ambiente.

6. O que são tokens?

Um token é um código digital temporário que serve para identificar e autorizar um usuário após o login.

7. Criando servidor

Top comments (0)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.