馃敀 Autenticaci贸n de usuarios y protecci贸n de rutas
Aprende a proteger partes de tu blog usando autenticaci贸n y control de acceso en Next.js.
馃搶 脥ndice de esta entrada:
- 馃洜️ Introducci贸n a la autenticaci贸n
- 馃摝 Instalaci贸n de NextAuth.js
- ⚙️ Configuraci贸n de proveedores de login
- 馃攽 Proteger p谩ginas y rutas
- 馃摑 Ejemplo pr谩ctico: p谩gina de administraci贸n
- 馃挕 Buenas pr谩cticas de seguridad
馃洜️ Introducci贸n a la autenticaci贸n
La autenticaci贸n permite controlar qui茅n puede acceder a ciertas p谩ginas de tu blog. Por ejemplo, solo los administradores deber铆an poder crear o borrar publicaciones.
馃摝 Instalaci贸n de NextAuth.js
NextAuth.js es la librer铆a m谩s popular para autenticaci贸n en Next.js. Permite login con correo/contrase帽a, Google, GitHub y m谩s.
npm install next-auth
# o con yarn
yarn add next-auth
⚙️ Configuraci贸n de proveedores de login
Vamos a crear un archivo /pages/api/auth/[...nextauth].js:
import NextAuth from "next-auth";
import GoogleProvider from "next-auth/providers/google";
export const authOptions = {
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
}),
],
secret: process.env.NEXTAUTH_SECRET,
};
export default NextAuth(authOptions);
Aseg煤rate de tener tus credenciales de Google en un archivo .env.local.
馃攽 Proteger p谩ginas y rutas
Para proteger una p谩gina podemos usar el hook useSession de NextAuth:
import { useSession } from "next-auth/react";
export default function AdminPage() {
const { data: session } = useSession();
if (!session) return <p>Acceso denegado. Por favor, inicia sesi贸n.</p>;
return <div>
<h1>Panel de Administraci贸n</h1>
</div>;
}
Esto asegura que solo usuarios autenticados puedan ver la p谩gina.
馃摑 Ejemplo pr谩ctico: p谩gina de administraci贸n
Puedes crear un bot贸n de login y logout con NextAuth:
import { signIn, signOut, useSession } from "next-auth/react";
export default function Navbar() {
const { data: session } = useSession();
return <nav>
{session ? (
<>
<span>Hola, {session.user.name}</span>
<button onClick={() => signOut()}>Salir</button>
</>
) : (
<button onClick={() => signIn()}>Iniciar sesi贸n</button>
)}
</nav>;
}
馃挕 Buenas pr谩cticas de seguridad
- Usa HTTPS siempre.
- No expongas tus credenciales en el repositorio.
- Protege las rutas de API tambi茅n, no solo las p谩ginas.
- Usa sesiones cortas y refresca tokens regularmente.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias