Login y Registro con JWT y NextAuthjs
Next.js is a popular JavaScript framework for building modern web applications. MongoDB is a leading NoSQL database. NextAuth.js is a complete open source authentication system for Next.js applications. In this article, we will explore how to implement authentication with MongoDB and NextAuth.js in a Next.js application.
Setting up MongoDB
The first step is to set up a MongoDB database. You can either use a self-hosted MongoDB instance or a cloud-based MongoDB service like MongoDB Atlas. Once you have your MongoDB database ready, you can proceed to the next step.
Creating a Next.js Application
Next, you need to create a Next.js application. You can do this using the following command:
npx create-next-app my-nextjs-auth-app
This will create a new Next.js application in a directory called my-nextjs-auth-app. Navigate into this directory and install the required dependencies:
cd my-nextjs-auth-app
npm install next-auth mongodb
Implementing Authentication with NextAuth.js
Next, you need to configure NextAuth.js to work with MongoDB. First, create a new file called […nextauth].js in the pages/api/auth directory. In this file, you can configure NextAuth.js to use MongoDB as its database and JWT for authentication:
// pages/api/auth/[...nextauth].js
import NextAuth from 'next-auth'
import Providers from 'next-auth/providers'
import { connectToDatabase } from '../../../util/mongodb'
export default NextAuth({
providers: [
Providers.Credentials({
async authorize(credentials) {
const { db } = await connectToDatabase()
const user = await db
.collection('users')
.findOne({ email: credentials.email })
if (user && user.password === credentials.password) {
return user
} else {
return null
}
}
})
],
database: process.env.MONGODB_URI,
})
This code sets up a custom credentials provider to handle login using email and password. It also configures NextAuth.js to use MongoDB as the database. Make sure to define the MONGODB_URI environment variable in your .env.local file.
Implementing Login and Registration Forms
Now that authentication is set up, you can implement login and registration forms in your Next.js application. You can use the NextAuth.js useSession and getSession hooks to check if a user is authenticated and get their session information:
// pages/index.js
import { useSession, getSession } from 'next-auth/react'
export default function Home() {
const { data: session } = useSession()
if (session) {
return
Welcome, {session.user.name}
} else {
return (
Login
Register
)
}
}
With these forms, users can log in using their email and password and register for a new account.
Conclusion
In this article, we learned how to implement authentication with MongoDB and NextAuth.js in a Next.js application. By using these technologies, you can easily add secure user authentication to your web application with minimal effort.
Gracias GRACIAS MUCHAS GRACIAS por este video y tu contenido en general tambien
Excelente video, solo quisiera saber si hay un ejemplo de cómo gestionar roles con Credentials provider ya que he revisado la documentación pero me es imposible obtener el rol a través de este método de autenticación
Excelente!, podria usarla para produccion sin problemas?
Hola, a alguien se le ha presentado problemas con los middleware al momento de subirlo a VErcel. Por favor si alguien tiene la solución. Gracias
Que IDE utilizas?
tutorial completado. gracias fazt
La validacion de la contraseña que tenga mas de 6 caracteres no funciona, porque sera ?
Muy buen tutorial 💪. No se si a alguien mas le pasa pero como se podría proteger la ruta de login y registro en caso de estar ya logueados? He intentado modificar el middleware pero no he podido. Por otro lado si antes de hacer login clicas en NextAuth a la izquierda de la navbar te redirige a login ya que no tienes sesión para acceder, pero si luego haces login y le vuelves a dar al enlace de NextAuth te redirige a login de nuevo en lugar de HomePage. Esto solo ocurre si antes de loguearte intentas acceder a la HomePage desde el enlace. Es algo muy extraño que tampoco he podido corregir 😕
Hola Fazt, una dudita, porque cuando por ejemplo, tus credenciales son incorrectas, te devuelve si, un error pero el status es un ok(200) y pasa lo mismo si las credenciales son correctas solo que ahí no devuelve un error, a lo que voy, es que cuando las credenciales están mal debe dar un error por ejemplo 400 o algo así de que algo está mal, no debería regresar un ok, hay alguna forma de cambiar eso?
Una pregunta como puedo realizar una consulta a la bd cuando ejecuto la funcion SignOut ?
Es decir supongamos que llevo una bitacora de cuando un usuario se loguea y cunado se desloguea entonces deseo hacer un update cuando el usuario cierre la sesion, agradeceria mucho la respuesta
Hola si necesitan ayuda o tienen alguna duda no duden en escribirme, me gusta ayudar personas, estoy aprendiendo programación también, ayudando se aprende.
Estos son mis nombres Sancheznot y Sancheznotdev, pueden conseguirme.
Con tu experiencia con nextjs, hay alguna razón porque utilizas el src folder?
Excelente video!
Hola Fazt, un alcance, en el Navbar.tsx al momento de usar el getServerSession , te condicionas a usar un elemento renderizable asincrono , osea:
const Navbar = async() => { … }
y eso puede tener problemas en el renderizado , como se puede apreciar en el minuto 1:58:26 del video(en el que inicias sesión pero no desaparecen los elementos del menu del navbar )
Para evitar que eso ocurra y que se re-renderice correctamente, se puede hacer con:
'use client'
import { useSession } from 'next-auth/react';
const Navbar = () => {
const { data :session } = useSession();
…
}
y bueno eso le cambié y se corrigió, si me equivoco te agradecería que me comentaras, gracias por tus videos , son lo máximo!
vavavavavava
Hola saben como adapto esto pero usando mysql?
Saludos Fazt y comunidad en general.. Primero quisiera felicitarte y agradecerte por estos videos, son joya pura para los que queremos ampliar nuestros conocimientos; estoy siguendo el video paso a paso, y todo ha salido muy bien hasta que llegue al minuto 36:16 donde no me devuelve los datos como en el video sino que me continua errores de conexion a la bade de datos. He verificado el codigo con el video y en efecto tengo el servidor MongoDB corriendo y conectado. Que podria estar pasando? agradeceria comentarios al respecto
Muy buen video bro! me quedo una duda de como arreglar o a mi parecer, no se si esta bien mi manera de pensar. Una vez logueado, como hago para que ese usuario que se logueo no acceda al form de registro, hay alguna manera? o me estoy enrroscando mucho? desde ya muchas gracias, saludos
Tutorial completado!
10/10
Hola Fazt muy buen video! Tengo una consulta de que forma se podría integrar next-auth con firebase authentication, estuve haciendo pruebas y logré correr bien todo pero el adaptador de firebase solo crea colecciones con la info del usuario y la sesión pero no crea usuarios reales en firebase. De que forma podría integrar ambos servicios de manera integrar ambas sesiones de y así ocupar los métodos de sesión disponibles de next-auth (cliente y servidor) pero que a la vez este vinculado con el servicio de firebase auth?