User Authentication with NextAuth.js using JWT and MongoDB in Next.js

Posted by

Nextjs Mongodb Autenticacion

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.

0 0 votes
Article Rating
30 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@alejandroz1606
6 months ago

Gracias GRACIAS MUCHAS GRACIAS por este video y tu contenido en general tambien

@pororounam
6 months ago

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

@mauroventicinque8272
6 months ago

Excelente!, podria usarla para produccion sin problemas?

@arnaldoespinoza2570
6 months ago

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

@vinlo8966
6 months ago

Que IDE utilizas?

@yefreyespinoza
6 months ago

tutorial completado. gracias fazt

@v1bra387
6 months ago

La validacion de la contraseña que tenga mas de 6 caracteres no funciona, porque sera ?

@67rlm
6 months ago

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 😕

@Hazael_Poot
6 months ago

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?

@anthonyernestolangpineiro4804
6 months ago

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

@Sancheznot1
6 months ago

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.

@JoseWaldier
6 months ago

Con tu experiencia con nextjs, hay alguna razón porque utilizas el src folder?

@agustinlazo1831
6 months ago

Excelente video!

@ferh2672
6 months ago

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!

@NathanaelAlvarez-jg7ek
6 months ago

vavavavavava

@dreamtech1751
6 months ago

Hola saben como adapto esto pero usando mysql?

@miguelsalazartomey5179
6 months ago

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

@lucasgonzalez8313
6 months ago

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

@YeisonDev
6 months ago

Tutorial completado!

10/10

@Felipe-pb9gu
6 months ago

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?