Client Side
Recomendo que você use server actions com o NextAuth. Mas se isso não for possível (ou se você estiver utilizando um SPA), precisaremos de uma solução client-side.
Preparando a Rota
Veja que o botão Login - Client Components
nos leva à rota /login-client
. Vamos criar uma página ali então. Só que dessa vez iremos utilizar a diretiva 'use client'
na nossa página.
Vamos copiar basicamente tudo do login
(não vamos nos preocupar com repetição de código). A page
, o layout
e o login-form
. A diferença aqui é que vamos apagar a action do login form e vamos criar um handleSubmit
.
A page.tsx
e layout.tsx
Vamos ver como ficaram esses arquivos:
page.tsx
layout.tsx
O componente login-form
login-form.tsx
Criando o handleSubmit
no login-form
e lidando com erros
Agora, vamos adicionar a funcionalidade. Veja que agora, a função signIn
não mais virá do nosso arquivo auth.ts
, mas sim do pacote next/react
. Essa função é específica para client-components e deverá ser utilizada. Passamos mais dois argumentos ao objeto de opções da função signIn
: A callbackUrl
, que é a página para onde queremos redirecionar quando o login é feito com sucesso; e o redirect: false
para não haja redirecionamento no caso de erros: queremos lidar com eles no próprio formulário.
Para lidar com os erros, vamos criar um estado error
que irá exibir a mensagem de erro quando necessário. De novo mapeamos o erro CredentialsSignin
para a string Credenciais Inválidas
.
O arquivo completo está abaixo: