Meeting management system with interactive calendar, groups, and notifications. Developed with Next.js, React, Express.js, MongoDB, TailwindCSS, Nodemailer and Context API.
A autenticação de usuários é uma parte crítica de qualquer aplicação web, especialmente em sistemas de gerenciamento de reuniões como o MeetEasy. A segurança e a personalização da experiência do usuário dependem de um sistema de autenticação robusto. Neste post, vou compartilhar como implementei a autenticação de usuários no MeetEasy utilizando Next.js, com um backend desenvolvido em Express.js e MongoDB para armazenar as informações do usuário.
Para o MeetEasy, decidi usar uma abordagem baseada em JSON Web Tokens (JWT) para a autenticação. Isso permite que os usuários façam login e acessem suas informações de maneira segura. A aplicação foi dividida em duas partes principais: o frontend, construído com Next.js, e o backend, desenvolvido em Express.js, ambos comunicando-se através de APIs REST.
No backend, utilizei o Express.js para lidar com as solicitações de registro e login. Aqui está um exemplo de como configurar a rota de registro:
const express = require('express'); const bcrypt = require('bcrypt'); const jwt = require('jsonwebtoken'); const User = require('./models/User'); // Modelo de usuário do MongoDB const router = express.Router(); // Rota de registro router.post('/register', async (req, res) => { const { username, email, password } = req.body; // Verificações e hash da senha const hashedPassword = await bcrypt.hash(password, 10); const newUser = new User({ username, email, password: hashedPassword }); try { await newUser.save(); res.status(201).send('Usuário criado com sucesso!'); } catch (error) { res.status(400).send('Erro ao criar usuário.'); } });
O login é onde o token JWT é gerado e enviado ao usuário:
// Rota de login router.post('/login', async (req, res) => { const { email, password } = req.body; const user = await User.findOne({ email }); if (!user) { return res.status(404).send('Usuário não encontrado.'); } const isPasswordValid = await bcrypt.compare(password, user.password); if (!isPasswordValid) { return res.status(401).send('Senha incorreta.'); } const token = jwt.sign({ id: user._id }, process.env.JWT_SECRET, { expiresIn: '1h' }); res.json({ token }); });
No frontend, utilizei a Context API do React para gerenciar o estado de autenticação do usuário. Aqui está um exemplo de como configurar o contexto:
import React, { createContext, useContext, useState } from 'react'; const AuthContext = createContext(); export const AuthProvider = ({ children }) => { const [user, setUser] = useState(null); const login = (token) => { localStorage.setItem('token', token); setUser(true); }; const logout = () => { localStorage.removeItem('token'); setUser(null); }; return ( <AuthContext.Provider value={{ user, login, logout }}> {children} </AuthContext.Provider> ); }; export const useAuth = () => { return useContext(AuthContext); };
A implementação da autenticação de usuário no MeetEasy não só melhorou a segurança da aplicação, mas também proporcionou uma experiência de usuário muito mais personalizada. Os usuários agora podem criar reuniões, gerenciar suas informações e receber notificações, tudo dentro de uma interface segura e amigável.
A autenticação de usuários é um aspecto essencial de qualquer aplicação moderna. No MeetEasy, a escolha de usar Next.js para o frontend e Express.js para o backend, com JWT para autenticação, provou ser uma solução eficaz e segura. Com a implementação bem-sucedida, o sistema está pronto para oferecer uma experiência de reunião interativa e personalizada, garantindo que as informações dos usuários permaneçam seguras e acessíveis apenas a eles.
Para mais detalhes sobre o projeto, consulte o repositório do MeetEasy.