EventoObtenha 50% de desconto no seu ingresso para MongoDB.local Londres em outubro 2. Use o código WEB50Saiba mais >>
Desenvolvedor MongoDB
Central de desenvolvedor do MongoDBchevron-right
Idiomaschevron-right
TypeScriptchevron-right

Autenticação NextAuth.js com MongoDB

Ahmed Bouchefra10 min read • Published Aug 30, 2024 • Updated Aug 30, 2024
MongooseNext.jsTypeScriptJavaScript
APLICATIVO COMPLETO
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
NextAuth.js é uma biblioteca de autenticação robusta construída para aplicativos Next.js. O NextAuth.js simplifica a integração de funcionalidades de autenticação e oferece compatibilidade com vários métodos de autenticação, incluindo provedores OAuth (Google, Github etc.), logins por e-mail/senha e muito mais.
Este tutorial mostra como configurar o NextAuth.js para autenticação de usuário com e-mail e senha em seu aplicativo Next.js 14 .
Você pode encontrar o código neste repositório do GitHub.

O que é Next-Auth?

Next-Auth é uma biblioteca de autenticação projetada para aplicativos Next.js especificamente. Simplificando, o Next-Auth facilita a adição de autenticação aos seus aplicativos Next.js. Ele fornece uma integração mais perfeita das funcionalidades de autenticação. O Next-Auth também oferece melhor compatibilidade com outros métodos de autenticação, como provedores OAuth (Google, Github, etc.).
O Next-Auth oferece um conjunto de APIs fáceis de usar e outros componentes que podem lidar com fluxos de autenticação muito complexos. Isso significa que os desenvolvedores podem se concentrar mais na criação de seus aplicativos.
O Next-Auth oferece pronto para uso, segurança de autenticação e gerenciamento de sessão integrado. É apropriado para aplicativos de todos os tamanhos e funciona bem com ambientes de computação de borda e sem servidor. Ele também oferece suporte completo ao Typescript , para uma melhor experiência do desenvolvedor.

Requisitos

Antes de começarmos, certifique-se de ter os seguintes pré-requisitos:
  • Node.js v20: Verifique se você tem o Node.js instalado em sua máquina. Você pode baixá-lo do site oficial.
  • React e Next.js 14: uma compreensão básica do React e Next.js 14 é útil para este tutorial.
  • (Opcional) Tenha o MongoDB Community Edition 7.0 instalado e em execução.
Certifique-se de que o serviço mongodb-community foi iniciado localmente. Como alternativa, você pode usar um MongoDB Atlas clustergratuito para sempre.

Criando o projeto Next.js

Vamos criar um novo projeto Next.js usando o seguinte comando no seu terminal:
Responda às perguntas da seguinte forma:
Após as instruções, create-next-app criará uma pasta com o nome do projeto e instalará as dependências necessárias.

Instalando dependências

Navegue dentro do seu projeto e instale as seguintes dependências:
O pacote próximo-auth fornece funcionalidades de autenticação para aplicativos Next.js. O pacote próximo-autenticação também oferece suporte integrado para vários fornecedores de autenticação e permite fácil integração com seu aplicativo.
A biblioteca bcryptjs fornece funções para hash de senhas usando o algoritmo bcrypt. É comumente usado para armazenar senhas com segurança em bancos de dados, gerando hashes de senha salgados.
Mongoose é uma biblioteca de modelagem de dados de objetos (ODM) para MongoDB e Node.js. Ele fornece uma solução simples e baseada em esquema para modelar os dados do aplicativo, facilitando o trabalho com bancos de dados MongoDB.
Depois de instalar essas dependências, você terá as ferramentas e bibliotecas necessárias para configurar os recursos de autenticação em seu aplicativo Next.js, integrá-lo ao MongoDB, criptografar senhas com segurança e definir modelos de dados usando o Mongoose.

Conectando ao MongoDB

Depois de instalar as dependências, é hora de conectar ao MongoDB. Crie um arquivo.env.local na raiz do seu projeto e adicione sua connection string do MongoDB:
Observação: se você estiver se conectando a um cluster do MongoDB Atlas, poderá encontrar sua string de conexão no painel do Atlas.
Crie um arquivolib/mongodb.ts e adicione o seguinte código para conectar a um MongoDB database utilizando o mongoose:
Estamos importando a bibliotecamongoose, que é uma biblioteca ODM Node.js popular para o MongoDB. Em seguida, recuperamos o URI MongoDB das variáveis de ambiente. Em seguida, definimos uma função assíncrona denominada connectDB que se conecta ao MongoDB database utilizando o URI obtido das variáveis de ambiente.
Dentro da funçãoconnectDB, usamos um blocotry...catch para lidar com quaisquer erros potenciais que podem ocorrer durante o processo de conexão do banco de dados. Dentro do blocotry, usamos o mongoose.connect() para estabelecer uma conexão com o MongoDB database utilizando o URI fornecido. Se a conexão for bem-sucedida, resolvemos a promessa com um valor de true.
Se ocorrer algum erro durante o processo de conexão, ele será capturado pelo blococatch. Nesse caso, registramos o erro no console e rejeitamos a promessa com o erro capturado.
Em seguida, crie um arquivomodels/User.tse comece adicionando as seguintes importações:
Adicione a interface do usuário:
Adicione o esquema de usuário:
Isso define um esquema Mongoose para um documento de usuário. O UserSchema especifica a estrutura e as regras de validação para dados de usuário armazenados em uma coleção MongoDB.
Por fim, exporte o modelo do usuário:
Isso garante que o modelo de usuário seja definido e esteja disponível para uso no aplicativo, recuperando um modelo existente ou criando um novo com base no esquema especificado.

Configurando NextAuth.js

Primeiro, precisamos de uma chave secreta NextAuth. Esta chave secreta é usada para criptografar tokens JWT e dados de sessão. Você pode obtê-lo simplesmente executando este comando em seu terminal e ele gerará uma chave aleatória para você:
Você precisa copiar o segredo para seu arquivo.env:
Crie um arquivolib/auth.tse comece adicionando as seguintes importações:
Defina um objeto NextAuth options da seguinte maneira:
Na funçãoauthorize(), adicione o seguinte código:
Este código verifica as credenciais do usuário (e-mail e senha) em relação às armazenadas em um MongoDB database. Ele garante que as credenciais fornecidas sejam válidas antes de permitir que o usuário prossiga com a autenticação.
Em seguida, crie um app/api/auth/[...nextauth]/route.ts arquivo e adicione o seguinte código:
Esse código importa as opções de autenticação de seu módulo, inicializa o manipulador de autenticação usando essas opções e exporta o manipulador a ser usado para solicitaçõesGET e POST nas rotas da API.

Criando uma ação de servidor para registrar usuários

Em Next.js, uma ação do servidor refere-se a qualquer lógica ou funcionalidade que seja executada no lado do servidor antes de renderizar a página. Isso pode incluir tarefas como buscar dados de uma API externa, acessar um banco de dados ou realizar verificações de autenticação.
Em nosso caso, criaremos uma ação de servidor para registrar usuários. Dentro da raiz do seu projeto, crie um arquivoactions/register.ts e comece adicionando as seguintes importações:
A diretiva "use server", colocada no início do arquivo, instrui Next.js a tratar a(s) função(ões) como uma ação do servidor. Essa função pode ser chamada a partir de componentes do lado do cliente, mas é executada no servidor.
Exporte uma ação de servidor da seguinte maneira:
A funçãoregisterlida com o processo de registro de um novo usuário conectando-se ao MongoDB database, verificando os endereços de e-mail existentes, fazendo hash das senhas e salvando os dados do usuário no MongoDB database.

Criando páginas

Após configurar o NextAuth e implementar uma ação de servidor para registro de usuário, a próxima etapa é criar as páginas de login e registro.

Login page

Para começar, vamos nos concentrar na página de login. Crie um arquivo denominado app/login/page.tsx e comece importando as dependências necessárias:
A diretivause clienté usada para marcar o componente como código do lado do cliente. Isso significa que o código dentro desse escopo só será executado e estará disponível no ambiente do navegador do usuário, e não no servidor.
Defina uma função e exporte-a:
No corpo da função, comece adicionando o seguinte código:
Isso estabelece o gerenciamento de estado para mensagens de erro e acesso ao roteador do lado do cliente.
Adicione a funçãohandleSubmit()da seguinte forma:
Isso define uma função assíncrona que lida com o envio de formulários para o login do usuário. Ele evita o comportamento padrão do formulário, extrai credenciais de usuário do formulário usando FormData, tenta se conectar usando NextAuth.js, e lida com o login bem-sucedido redirecionando o usuário para a página inicial e com possíveis erros atualizando o estado de erro do componente.
Retorna o seguinte código JSX:
Isso simplesmente cria um formulário que permite aos usuários inserir seu e-mail e senha para autenticação e fornece um link para navegar até a página de registro se ainda não tiverem uma conta.
Veja como é o formulário: formulário de inscrição

Página de registro

Em seguida, vamos criar a página de registro. Crie um arquivoapp/register/page.tsx e comece adicionando o seguinte código:
Isso cria um componente do lado do cliente que inicializa o estado para tratamento de erros, utiliza o roteador Next.js para navegação e fornece uma referência ao elemento do formulário, que será criado abaixo, usando uma ref.
Adicione a funçãohandleSubmit():
Isso define uma função assíncrona denominada handleSubmit, que é chamada quando um formulário é enviado. A função lida com o envio do formulário, incluindo a extração dos dados do formulário usando FormData, o registro do usuário chamando a ação do servidor de registro, o tratamento de erros e o redirecionamento do usuário para a página de login após o registro bem-sucedido. Caso contrário, ela define o erro que será exibido.
Retorna o seguinte código JSX:
É assim que parece:
formulário de inscrição

Usando o provedor de sessão e exibindo o estado de autenticação

Nesta seção, demonstraremos como usar o SessionProvider no layout pai para garantir que o gerenciamento de sessão esteja disponível em todo o aplicativo. Recuperaremos o estado de autenticação da sessão e exibiremos dinamicamente um botão "Sign Out" se o usuário estiver autenticado, ou um botão "Sign In" se o usuário não estiver autenticado.
Crie um app/provider.tsx arquivo e adicione o seguinte código:
Atualize o app/layout.tsx com o provedor que criamos. Primeiro importe-o:
Em seguida, adicione da seguinte forma:
Atualize o arquivoapp/page.tsx da seguinte maneira:
Atualize o arquivoapp/globals.csspara remover o CSS personalizado e manter apenas o seguinte:

Teste

Você primeiro precisa se registrar a partir desta interface:
Interface de login
Você pode então fazer login a partir desta interface:
registrar interface
Você será redirecionado para a página inicial com o botão “Sign Out”, que aparece somente quando o usuário está logado, e você pode usá-lo para sair do aplicativo:
botão de saída

Conclusão

Neste tutorial, analisamos as etapas para configurar a autenticação NextAuth.js com o MongoDB como banco de dados de back-end. Começamos criando um novo projeto Next.js e instalando as dependências necessárias. Em seguida, estabelecemos uma conexão com o MongoDB usando o Mongoose e definimos um esquema de usuário para estruturar nossos dados de usuário.
Em seguida, configuramos NextAuth.js gerando uma chave secreta, definindo opções de autenticação e implementando a lógica de autorização para verificar as credenciais do usuário em relação ao MongoDB. Também criamos ações de servidor para o registro de usuários, lidando com operações de banco de dados com segurança no lado do servidor.
Depois de configurar a autenticação, criamos páginas de login e registro usando componentes React e as integramos ao NextAuth.js para autenticação. Lidamos com envios de formulários, tratamento de erros e redirecionamento de usuários com base no status da autenticação.
Por fim, atualizamos o layout para incluir um provedor de sessão para gerenciar sessões de usuário e garantir a exibição adequada do status de autenticação na página inicial.
Ao seguir essas etapas, você pode implementar efetivamente a autenticação em seu aplicativo Next.js usando o NextAuth.js e o MongoDB, fornecendo uma experiência segura e contínua para seus usuários e simplificando o processo de configuração da autenticação para desenvolvedores.
Quer continuar a conversa? Vá para a comunidade de desenvolvedores do MongoDB em seguida.
Principais comentários nos fóruns
Avatar do Comentarista do Fórum
Akash_Mishra1Akash Mishralast month

este código não está funcionando no modo de produção. está mostrando erro
O erro foi causado pela importação de 'mongoose/dist/browser.umd.js


Avatar do Comentarista do Fórum
Swapnil_KotkarSwapnil Kotkaryesterday

@Dvir_Ben_Ishay Hello, I am also facinf exact issue from past 7 days. Failed to figure out this issue. Have you resolved this issue?. Please inform or you can write me at: swapnilkotkar793@gmail.com

Veja mais nos fóruns

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Build a JavaScript AI Agent With LangGraph.js and MongoDB


Sep 10, 2024 | 15 min read
Tutorial

Crie uma REST API com Cloudflare Workers e MongoDB Atlas


Mar 29, 2024 | 7 min read
Tutorial

GraphQL APIs instantâneas para MongoDB com Grafbase


Oct 12, 2023 | 7 min read
Início rápido

Introdução ao Bun e ao MongoDB


Jul 19, 2024 | 9 min read
Sumário