Ok, até agora a gente estava “brincando” com o NextAuth. Fizemos um usuário falso e tudo mais…
Mas e se a gente quiser um usuário real?
Um wrapper para o Prisma
É uma boa prática instanciarmos o PrismaClient apenas uma vez especialmente como estamos lidando com hot reloading no React.
Vamos criar então um arquivo lib/db.ts.
A rota - e uma Server Action - de cadastro
Talvez você não tenha percebido, mas já deixamos um formulário pronto de cadastro na rota /register.
Por enquanto ele não faz absolutamente nada.
Vamos então criar uma action de cadastro.
Vamos utilizar uma lib chamada bcrypt-ts. Instale ela primeiro.
Agora precisamos fazer o link entre a nossa action e o form:
Lidando com erros
Veja que estamos lançando todo e qualquer erro da nossa aplicação. Vamos usar a página error.tsx do Next.js para mostrarmos o erro na tela.
Vamos fazer 2 componentes:
error.tsx
_components/error-card.tsx onde vamos deixar o layout do card de erro.
Vamos criar a página de erro:
E agora o componente para deixar o nosso erro agradável visualmente:
Agora, como último passo, precisamos proteger a rota de cadastro. Isso é, ninguém que está logado poderá acessá-la.
Protegendo a rota /register de usuários logados
Agora a mágica do NextAuth começa a acontecer. Veja como é simples sabermos em qualquer rota se o usuário está logado ou não.
Vamos proteger a rota /register para permitir apenas usuários deslogados:
Duas linhas de código e… voilá!
Tente logar novamente (/api/auth/signin -> clicando no botão) e depois tente acessar a rota de cadastro: você deverá ser redirecionado para a home!
Ok, mas ainda assim não temos um sistema de login “vida real”, porque basta clicar no botão para logarmos. Precisamos de um sistema que realmente faça a comparação de email e senha