Capa do Ebook gratuito Como criar APIs em NodeJS do básico ao avançado

Como criar APIs em NodeJS do básico ao avançado

Novo curso

149 páginas

Criando uma API REST básica com NodeJS e ExpressJS: Autenticação e autorização

Capítulo 74

Tempo estimado de leitura: 4 minutos

Audio Icon

Ouça em áudio

0:00 / 0:00

Uma das partes mais importantes de qualquer aplicação é a segurança e a maneira como lidamos com a autenticação e autorização. Isso é especialmente verdadeiro ao criar APIs, onde precisamos garantir que apenas usuários autenticados e autorizados possam acessar certos dados e funcionalidades. Neste capítulo, vamos explorar como criar uma API REST básica com NodeJS e ExpressJS, com foco na autenticação e autorização.

Autenticação

Autenticação é o processo de verificar a identidade de um usuário. Em outras palavras, é como confirmamos que um usuário é quem ele diz ser. Existem várias maneiras de fazer isso, mas uma das mais comuns é através do uso de nomes de usuário e senhas.

Para implementar a autenticação em nossa API, primeiro precisamos instalar algumas dependências. Vamos usar o pacote 'bcrypt' para hashear as senhas dos usuários e o pacote 'jsonwebtoken' para gerar tokens de autenticação.

$ npm install bcrypt jsonwebtoken

Com as dependências instaladas, podemos começar a implementar a autenticação. Primeiro, vamos criar uma rota para o registro de usuários. Nesta rota, vamos hashear a senha do usuário antes de armazená-la no banco de dados.

const express = require('express');
const bcrypt = require('bcrypt');
const User = require('../models/User');

const router = express.Router();

router.post('/register', async (req, res) => {
  const hashedPassword = await bcrypt.hash(req.body.password, 10);
  const user = new User({ username: req.body.username, password: hashedPassword });
  await user.save();
  res.status(201).send({ message: 'User registered successfully' });
});

Agora, vamos criar uma rota para o login dos usuários. Nesta rota, vamos verificar se a senha fornecida corresponde à senha armazenada no banco de dados. Se a senha estiver correta, vamos gerar um token de autenticação e enviá-lo ao usuário.

Continue em nosso aplicativo

Você poderá ouvir o audiobook com a tela desligada, ganhar gratuitamente o certificado deste curso e ainda ter acesso a outros 5.000 cursos online gratuitos.

ou continue lendo abaixo...
Download App

Baixar o aplicativo

const jwt = require('jsonwebtoken');

router.post('/login', async (req, res) => {
  const user = await User.findOne({ username: req.body.username });
  if (!user || !await bcrypt.compare(req.body.password, user.password)) {
    return res.status(401).send({ message: 'Invalid username or password' });
  }

  const token = jwt.sign({ id: user._id }, 'your_jwt_secret');
  res.send({ token });
});

Autorização

Autorização é o processo de verificar se um usuário tem permissão para realizar uma ação específica. Em outras palavras, é como determinamos o que um usuário pode e não pode fazer. Existem várias maneiras de fazer isso, mas uma das mais comuns é através do uso de tokens de autenticação.

Vamos criar um middleware para verificar o token de autenticação dos usuários. Se o token for válido, vamos armazenar o ID do usuário no objeto de solicitação e chamar a próxima função. Se o token não for válido, vamos retornar uma resposta com o status 401 (Não Autorizado).

const jwt = require('jsonwebtoken');

const authenticate = (req, res, next) => {
  const token = req.headers.authorization;
  if (!token) {
    return res.status(401).send({ message: 'No token provided' });
  }

  jwt.verify(token, 'your_jwt_secret', (err, decoded) => {
    if (err) {
      return res.status(401).send({ message: 'Invalid token' });
    }

    req.userId = decoded.id;
    next();
  });
};

Agora, podemos usar este middleware em qualquer rota que requer autenticação. Por exemplo, podemos criar uma rota para obter os detalhes do usuário autenticado.

router.get('/me', authenticate, async (req, res) => {
  const user = await User.findById(req.userId);
  res.send(user);
});

Com isso, concluímos a criação de uma API REST básica com NodeJS e ExpressJS, com autenticação e autorização. Lembre-se, a segurança é um aspecto crucial de qualquer aplicação e deve ser levada a sério desde o início do desenvolvimento.

Agora responda o exercício sobre o conteúdo:

Qual é a diferença entre autenticação e autorização no contexto de uma API REST e como elas são implementadas usando NodeJS e ExpressJS?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Autenticação verifica a identidade do usuário, gerando um token após login com senha. Autorização verifica se o usuário tem permissão para realizar ações, validando o token. Em NodeJS/ExpressJS, usamos 'bcrypt' para hashear senhas e 'jsonwebtoken' para criar e verificar tokens, implementando autenticação e autorização através de middleware.

Próximo capitúlo

Criando uma API REST básica com NodeJS e ExpressJS: Manipulação de dados no banco de dados

Arrow Right Icon
Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.