iron-session es una biblioteca de sesión segura, apátrida y basada en cookies para JavaScript.

El empleado es un conjunto completo de UI integrables, API flexibles y paneles de administración para autenticar y administrar a sus usuarios.
Agregar autenticación en 7 minutos
Los datos de la sesión se almacenan en cookies firmadas y encriptadas que son decodificadas por el código de su servidor de manera estatinera (= sin red involucrada). Esta es la misma técnica utilizada por marcos como Ruby on Rails.
Demo en línea y ejemplos: https://get-iron-session.vercel.app ?
Presentado en el siguiente.js Documentation ️
getIronSession<T>(req, res, sessionOptions): Promise<IronSession<T>>getIronSession<T>(cookieStore, sessionOptions): Promise<IronSession<T>>session.save(): Promise<void>session.destroy(): voidsession.updateConfig(sessionOptions: SessionOptions): voidsealData(data: unknown, { password, ttl }): Promise<string>unsealData<T>(seal: string, { password, ttl }): Promise<T>pnpm add iron-sessionTambién tenemos ejemplos extensos aquí: https://get-iron-session.vercel.app/.
Para obtener una sesión, hay un solo método que saber: getIronSession .
// Next.js API Routes and Node.js/Express/Connect.
import { getIronSession } from 'iron-session' ;
export async function get ( req , res ) {
const session = await getIronSession ( req , res , { password : "..." , cookieName : "..." } ) ;
return session ;
}
export async function post ( req , res ) {
const session = await getIronSession ( req , res , { password : "..." , cookieName : "..." } ) ;
session . username = "Alison" ;
await session . save ( ) ;
} // Next.js Route Handlers (App Router)
import { cookies } from 'next/headers' ;
import { getIronSession } from 'iron-session' ;
export async function GET ( ) {
const session = await getIronSession ( cookies ( ) , { password : "..." , cookieName : "..." } ) ;
return session ;
}
export async function POST ( ) {
const session = await getIronSession ( cookies ( ) , { password : "..." , cookieName : "..." } ) ;
session . username = "Alison" ;
await session . save ( ) ;
} // Next.js Server Components and Server Actions (App Router)
import { cookies } from 'next/headers' ;
import { getIronSession } from 'iron-session' ;
async function getIronSessionData ( ) {
const session = await getIronSession ( cookies ( ) , { password : "..." , cookieName : "..." } ) ;
return session
}
async function Profile ( ) {
const session = await getIronSessionData ( ) ;
return < div > { session . username } </ div > ;
} Tenemos muchos patrones y ejemplos diferentes en la demostración en línea, eche un vistazo: https://get-iron-session.vercel.app/.
✅ Producción lista y mantenida.
Se requieren dos opciones: password y cookieName . Todo lo demás se calcula automáticamente y generalmente no necesita ser cambiado. ****
password , requerida : clave privada utilizada para cifrar la cookie. Tiene que tener al menos 32 caracteres. Use https://1password.com/password-generator/ para generar contraseñas seguras. password puede ser una string o un object con teclas de incremento como esta: {2: "...", 1: "..."} para permitir la rotación de contraseña. La sesión de hierro utilizará la clave más alta para nuevas galletas.
cookieName , requerido : Nombre de la cookie a almacenarse
ttl , opcional : en segundos. Predeterminado al equivalente de 14 días. Puede establecer esto en 0 y la sesión de hierro calculará el valor máximo permitido por cookies.
cookieOptions , Opcional : cualquier opción disponible en JSHTTP/Cookie#Serialize, excepto el encode que no es un atributo de cocción. Vea los atributos de Cookie de Mozilla y los campos de galletas cromadas. Predeterminado a:
{
httpOnly : true ,
secure : true , // set this to false in local (non-HTTPS) development
sameSite : "lax" , // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite#lax
maxAge : ( ttl === 0 ? 2147483647 : ttl ) - 60 , // Expire cookie before the session expires.
path : "/" ,
} getIronSession<T>(req, res, sessionOptions): Promise<IronSession<T>> type SessionData = {
// Your data
}
const session = await getIronSession < SessionData > ( req , res , sessionOptions ) ;getIronSession<T>(cookieStore, sessionOptions): Promise<IronSession<T>> type SessionData = {
// Your data
}
const session = await getIronSession < SessionData > ( cookies ( ) , sessionOptions ) ;session.save(): Promise<void>Guarda la sesión. Esta es una operación asincrónica. Debe hacerse y esperar antes de que los encabezados se envíen al cliente.
await session . save ( )session.destroy(): voidDestruye la sesión. Esta es una operación sincrónica, ya que solo elimina la cookie. Debe hacerse antes de que se envíen encabezados al cliente.
session . destroy ( )session.updateConfig(sessionOptions: SessionOptions): voidActualiza la configuración de la sesión con nuevas opciones de sesión. Todavía necesita llamar a Save () si desea que se apliquen.
sealData(data: unknown, { password, ttl }): Promise<string> Este es el método subyacente y el mecanismo de sello que alimenta iron-session . Puede usarlo para sellar los data que desee y pasarlos. Un USECase son enlaces mágicos: generas un sello que contiene una ID de usuario para iniciar sesión y enviarla a una ruta en tu sitio web (como /magic-login ). Una vez recibido, puede decodificar de forma segura el sello con unsealData y registrar al usuario.
unsealData<T>(seal: string, { password, ttl }): Promise<T> Este es lo opuesto a sealData y le permite decodificar un sello para recuperar los datos originales.
Esto hace que sus sesiones estén apátridas: dado que los datos se pasan en cookies, no necesita ningún servidor o servicio para almacenar datos de sesión.
También se puede encontrar más información en el sitio web de Ruby on Rails que utiliza la misma técnica.
Las sesiones no se pueden invalidar instantáneamente (o "desconectar a este cliente"), ya que generalmente no hay estado almacenado sobre las sesiones en el servidor de forma predeterminada. Sin embargo, en la mayoría de las aplicaciones, el primer paso al recibir una solicitud autenticada es validar al usuario y sus permisos en la base de datos. Por lo tanto, para desconectar fácilmente a los clientes (o invalidar sesiones), puede agregar un estado `ISBLOCKED`` en la base de datos y crear una interfaz de usuario para bloquear a los clientes.
Luego, cada vez que se recibe una solicitud que implica leer o alterar datos confidenciales, asegúrese de verificar este indicador.
Sí, exponemos sealData y unsealData que no están vinculados a las galletas. De esta manera, puede sellar y revelar cualquier objeto en su aplicación y mover sellos para iniciar sesión en los usuarios.
No tanto:
Dependiendo de sus propias necesidades y preferencias, iron-session puede o no que se ajuste o no.
@hapi/iron .@hapi/iron como iron-webcrypto utilizando API web estándar.next-connect y next-session .