Português (Portugal)
  • nextjs
  • app-router
  • server-actions
  • edge

Implementação de sessão stateless para Next.js usando Server Actions

Usando a nova funcionalidade Server Actions do Next.js para implementar sessão stateless baseada em cookies e experimentar os benefícios do Server Actions.

Sijie
Sijie
Developer

Introdução

Após o muito celebrado lançamento do App Router, o Next.js introduziu outra funcionalidade, as Server Actions. Esta nova inovação facilita as manipulações de dados no lado do servidor, reduz a dependência de JavaScript no lado do cliente e melhora progressivamente formulários–tudo isso enquanto usa JavaScript e React para criar aplicações web robustas sem a necessidade de APIs REST tradicionais.

Neste artigo, exploramos as muitas vantagens proporcionadas por esta inovação e veremos na prática ao implementarmos uma sessão stateless baseada em cookies para o Next.js. Este texto serve como um guia passo a passo que irá acompanhá-lo em cada fase da criação de um projeto de demonstração usando o App Router.

Nossa demonstração prática pode ser facilmente implementada no Vercel usando o Edge Runtime. Pode descarregar o código-fonte completo a partir do GitHub.

Afastando-se das APIs REST

Tradicionalmente, se quisermos criar uma aplicação web Next.js que consulta um banco de dados no backend, podemos criar algumas APIs REST para validar o estado de autenticação e consultar o banco de dados, então a aplicação React no front-end chamará essas APIs. Mas se não houver necessidade de abrir a API ao público e esta aplicação React for o único cliente, parece redundante usar APIs REST, pois elas só serão chamadas por nós mesmos.

Com as Server Actions, o componente React pode agora executar código do lado do servidor. Em vez de precisar criar manualmente um endpoint API, as Server Actions criam automaticamente um endpoint para o Next.js usar nos bastidores. Quando se chama uma Server Action, o Next.js envia um pedido POST para a página em que está com metadados sobre qual ação executar.

A necessidade de uma sessão stateless

Como um framework preferido para criar aplicações stateless, o Next.js muitas vezes significa ser serverless, o que nos impede de usar a memória para armazenar os dados de sessão. As sessões tradicionais exigem o uso de um serviço de armazenamento externo, como Redis ou um banco de dados.

No entanto, quando os dados da sessão são suficientemente pequenos, temos uma alternativa: criar uma sessão stateless usando métodos de encriptação segura e cookies armazenados no lado do cliente. Este método evita a necessidade de armazenamento externo e mantém os dados de sessão descentralizados, oferecendo benefícios significativos em termos de carga do servidor e desempenho geral da aplicação.

Portanto, o nosso objetivo é uma sessão stateless leve e eficiente que aproveite a capacidade de armazenamento do lado do cliente, assegurando a segurança através de uma encriptação bem executada.

Implementação básica da sessão

Primeiro, precisamos iniciar um novo projeto:

Para mais detalhes sobre a instalação, consulte o guia oficial.

Criando uma biblioteca de sessão

Para facilitar o entendimento das Server Actions, vamos criar uma versão simplificada da sessão primeiro. Nesta versão, usaremos JSON para armazenar os dados da sessão em cookies.

Crie um arquivo chamado session/index.ts e inclua o seguinte código:

A primeira linha "use server" marca as funções deste arquivo como Server Actions.

Como não podemos aceder diretamente a request e response, usamos next/headers para ler e escrever cookies. Isto só está disponível em Server Actions.

Chegando: duas outras Server Actions

Com a biblioteca de sessão em vigor, é hora de implementar uma funcionalidade de iniciar e encerrar sessão para mostrar a usabilidade da sessão.

Incorpore o seguinte código em user/index.ts:

Aqui, estamos usando um processo de "login fictício" que apenas exige um nome de utilizador.

Construindo a página

No App Router, a página geralmente é um componente assíncrono, e Server Actions não podem ser chamadas diretamente de tal componente. Precisamos criar componentes usando "use client":

components/sign-in.tsx

components/sign-out.tsx

Finalmente, vamos construir a nossa app/page.tsx

Implementando encriptação

O trabalho das Server Actions está concluído. Agora, a parte final envolve a implementação de encriptação que pode ser alcançada através de crypto.

Em seguida, modifique a biblioteca de sessões para implementar o seguinte:

Conclusão

Parabéns! Tu implementaste com sucesso uma sessão stateless para Next.js. Aqui está uma pré-visualização online no Vercel, e podes descarregar o código-fonte completo aqui. Esperamos que este guia tenha ajudado na tua compreensão das novas Server Actions.

A seguir, exploraremos como usar as Server Actions para integrar Logto para Next.js. Fica atento!