Login Nativo do Next Auth
Ao entrarmos na rota api/auth/signin
podemos perceber que não existe nenhum campo para informar email e senha. E até agora o comportamento é “clicou - logou”, mesmo sem escrever nenhuma informação como email e senha.
É claro que esse sistema nunca seria implementado, então vamos fazer algo mais “vida-real”. Vamos transformar esse login sem inputs em um login aceitável para uma aplicação.
Adicionando inputs no login
Para que a gente deixe com o NextAuth todas as telas de autenticação com credenciais, precisamos informá-lo quais credenciais nós vamos precisar. Nem sempre é email e senha: poderia ser username e senha, ou cpf e senha. Por isso precisamos alterar as configurações no nosso arquivo auth.ts
:
Nesse caso nosso queremos usar para login apenas email e senha. Veja que, a partir de agora, os inputs irão aparecer na nossa rota de login. Maravilha!
Mas ainda tem um problema: independente de qual informação é inserida, o login é sempre feito.
Precisamos então alterar a função authorize
.
Adicionando a lógica do login
Vamos alterar a lógica de nosso login para que:
- Apenas usuários cadastrados possam logar
- A senha tem que “bater” com a senha do cadastro
Para isso, vamos mudar a função authorize
dentro do nosso arquivo auth.ts
.
Logicamente que poderíamos ser mais estritos na validação dos dados (usando uma biblioteca como zod, por exemplo). Mas como o objetivo aqui é apenas exemplificar o NextAuth, penso que essa validação está, para fins didáticos, de bom tamanho.
Uma outra modificação que devemos fazer é alterar no nosso esquema do user (schema.prisma
) para que o id do usuário seja string e não numérico (para facilitar com a tipagem mais para frente). Se quiser saber mais sobre isso, dá uma olhada aqui.
Pronto!
Temos um pequeno sistema de login, usando NextAuth, Prisma e SQLite!