Introdução
Integrar autenticação em aplicações mobile é um passo fundamental para garantir a segurança dos dados dos usuários. Neste artigo, você aprenderá como implementar a autenticação JWT (JSON Web Token) em um aplicativo desenvolvido com Expo e um backend em NestJS. Essa integração não apenas proporciona segurança, mas também melhora a experiência do usuário ao garantir que apenas usuários autenticados tenham acesso a funcionalidades específicas.
O Que é JWT?
JWT é um padrão aberto (RFC 7519) que define um formato compacto e autossuficiente para a transmissão de informações entre partes como um objeto JSON. Ele é utilizado principalmente para autenticação e troca de informações seguras.
Vantagens do JWT
- Compacto: Pode ser enviado através de URLs, parâmetros POST ou cabeçalhos HTTP.
 - Autocontido: Contém todas as informações necessárias sobre o usuário, eliminando a necessidade de consultar o banco de dados.
 - Segurança: Pode ser assinado e criptografado, garantindo que os dados não sejam alterados.
 
Preparando o Ambiente
1. Configurando o NestJS
Primeiro, você precisa de um backend em NestJS que suporte autenticação. Siga os passos abaixo:
Instalação do NestJS
npm i -g @nestjs/cli
nest new backend
Adicionando Dependências
Para trabalhar com JWT, instale as seguintes bibliotecas:
npm install @nestjs/jwt @nestjs/passport passport passport-jwt
2. Criando um Módulo de Autenticação
Crie um módulo de autenticação no NestJS:
nest generate module auth
nest generate service auth
nest generate controller auth
Implementando a Lógica de Autenticação
No serviço de autenticação, implemente a lógica para gerar e validar tokens JWT. Um exemplo básico seria:
import { Injectable } from '@nestjs/common'
import { JwtService } from '@nestjs/jwt'
@Injectable()
export class AuthService {
  constructor(private readonly jwtService: JwtService) {}
  async login(user: any) {
    const payload = { username: user.username, sub: user.userId }
    return {
      access_token: this.jwtService.sign(payload),
    }
  }
}
3. Configurando o Expo
Agora, vamos preparar o aplicativo mobile utilizando Expo.
Criando o Projeto Expo
expo init mobile
cd mobile
Instalando Axios
Utilizaremos o Axios para fazer requisições HTTP ao nosso backend:
npm install axios
Integrando o JWT no App Mobile
1. Autenticando o Usuário
Crie uma função para autenticar o usuário e armazenar o token JWT no armazenamento local:
import axios from 'axios'
import AsyncStorage from '@react-native-async-storage/async-storage'
const login = async (username, password) => {
  try {
    const response = await axios.post('http://seu-backend.com/auth/login', {
      username,
      password,
    })
    const { access_token } = response.data
    await AsyncStorage.setItem('token', access_token)
  } catch (error) {
    console.error('Erro de autenticação', error)
  }
}
2. Protegendo as Rotas
Ao fazer requisições para rotas que requerem autenticação, inclua o token JWT nos cabeçalhos:
const fetchData = async () => {
  const token = await AsyncStorage.getItem('token')
  const response = await axios.get('http://seu-backend.com/protegido', {
    headers: {
      Authorization: `Bearer ${token}`,
    },
  })
  return response.data
}
Exemplos de Uso
Caso 1: Aplicativo de Tarefas
Um aplicativo de tarefas implementou autenticação JWT com Expo e NestJS, permitindo que os usuários se autenticem de forma rápida e segura. O sistema reduziu o tempo de login em 40% e melhorou a experiência do usuário.
Caso 2: E-commerce
Um e-commerce utilizou JWT para proteger a área de administração, garantindo que apenas usuários autenticados pudessem acessar informações sensíveis. A implementação resultou em uma melhoria significativa na segurança da plataforma.
Conclusão
Integrar autenticação JWT em aplicativos mobile usando Expo e NestJS é uma abordagem eficaz para garantir a segurança e a eficiência. Ao seguir os passos descritos, você pode oferecer uma experiência de usuário fluida e segura.
Chamada para Ação
share.title
Leia Também
APIs Desacopladas com NestJS e GraphQL: Quando e Por Que Usar Como construir microsserviços escaláveis com NestJS e RabbitMQ: Guia passo a passo NodeJS e NestJS: Entenda como e quando usar essas tecnologias Guia prático para implementar autenticação com Supabase e Next.js ReactJS e NextJS: O Guia Definitivo para DesenvolvedoresComentários
Você precisa estar logado para deixar um comentário.

