iron-session ist eine sichere, staatenlose und Cookie-basierte Sitzungsbibliothek für JavaScript.

Der Angestellte ist eine vollständige Suite an eingebettbarer UIs, flexibler APIs und Admin -Dashboards, um Ihre Benutzer zu authentifizieren und zu verwalten.
Authentifizierung in 7 Minuten hinzufügen
Die Sitzungsdaten werden in signierten und verschlüsselten Cookies gespeichert, die von Ihrem Servercode staatenlos dekodiert werden (= kein Netzwerk beteiligt). Dies ist die gleiche Technik, die von Frameworks wie Ruby on Rails verwendet wird.
Online-Demo und Beispiele: https://get-IRICR-Session.vercel.app ?
In der nächsten.js dokumentation ️ vorgestellt
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-sessionWir haben auch hier umfangreiche Beispiele: https://get-iron-session.vercel.app/.
Um eine Sitzung zu erhalten, gibt es eine einzige Methode zu wissen: 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 > ;
} Wir haben viele verschiedene Muster und Beispiele zur Online-Demo, schauen Sie an: https://get-iron-session.vercel.app/.
✅ Produktion bereit und gepflegt.
Es sind zwei Optionen erforderlich: password und cookieName . Alles andere wird automatisch berechnet und muss normalerweise nicht geändert werden. ****
password , erforderlich : Privatschlüssel zum Verschlüsseln des Cookie. Es muss mindestens 32 Zeichen lang sein. Verwenden Sie https://1password.com/password-generator/, um starke Passwörter zu generieren. password kann entweder eine string oder ein object mit Inkrementierungsschlüssel wie folgt sein: {2: "...", 1: "..."} um eine Kennwortrotation zu ermöglichen. Die Eisensitzung verwendet den höchsten nummerierten Schlüssel für neue Kekse.
cookieName , erforderlich : Name des zu gespeicherten Keks
ttl , optional : in Sekunden. Verzug zu 14 Tagen. Sie können diese auf 0 einstellen und die Eisensitzung berechnet den maximal zulässigen Wert durch Cookies.
cookieOptions , optional : Jede Option, die bei JSHTTP/Cookie#Serialize erhältlich ist, mit Ausnahme von encode , das kein Set-Cookie-Attribut ist. Siehe Mozilla Set-Cookie-Attribute und Chrome Cookie Fields. Standard an:
{
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>Rettet die Sitzung. Dies ist eine asynchrone Operation. Es muss erledigt und erwartet werden, bevor die Header an den Kunden gesendet werden.
await session . save ( )session.destroy(): voidZerstört die Sitzung. Dies ist ein synchroner Betrieb, da es nur den Keks entfernt. Es muss geschehen, bevor die Header an den Kunden gesendet werden.
session . destroy ( )session.updateConfig(sessionOptions: SessionOptions): voidAktualisiert die Konfiguration der Sitzung mit neuen Sitzungsoptionen. Sie müssen weiterhin Save () anrufen, wenn Sie möchten, dass sie angewendet werden.
sealData(data: unknown, { password, ttl }): Promise<string> Dies ist die zugrunde liegende Methode und den Versiegelungsmechanismus, der iron-session versorgt. Sie können es verwenden, um alle gewünschten data zu versiegeln und sie zu übergeben. Eine Usecase sind magische Links: Sie generieren ein Siegel, das eine Benutzer-ID enthält, um sich anzumelden und an eine Route auf Ihrer Website (wie /magic-login ) zu senden. Sobald Sie empfangen werden, können Sie das Siegel sicher mit unsealData dekodieren und den Benutzer protokollieren.
unsealData<T>(seal: string, { password, ttl }): Promise<T> Dies ist das Gegenteil von sealData und ermöglicht es Ihnen, ein Siegel zu dekodieren, um die ursprünglichen Daten zurückzubekommen.
Dies macht Ihre Sitzungen aufregend: Da die Daten in Cookies weitergegeben werden, benötigen Sie keinen Server oder Dienst, um Sitzungsdaten zu speichern.
Weitere Informationen finden Sie auch auf der Website von Ruby on Rails, die dieselbe Technik verwendet.
Sitzungen können nicht sofort ungültig werden (oder "diesen Kunden trennen"), da in der Regel standardmäßig keine Status über Sitzungen auf dem Server gespeichert wird. In den meisten Anwendungen besteht der erste Schritt bei der Erhalt einer authentifizierten Anfrage jedoch darin, den Benutzer und deren Berechtigungen in der Datenbank zu validieren. Um Kunden leicht zu trennen (oder Sitzungen ungültig zu machen), können Sie in der Datenbank einen "isblocked" -Zustand in der Datenbank hinzufügen und eine Benutzeroberfläche erstellen, um Kunden zu blockieren.
Jedes Mal, wenn eine Anfrage empfangen wird, bei der sensible Daten gelesen oder geändert werden, überprüfen Sie dieses Flag.
Ja, wir enthüllen sealData und unsealData , die nicht an Kekse gebunden sind. Auf diese Weise können Sie jedes Objekt in Ihrer Anwendung versiegeln und abspalten und die Siegel an Anmeldeberäte umgeben.
Nicht so sehr:
Abhängig von Ihren eigenen Bedürfnissen und Vorlieben kann iron-session zu Ihnen passt oder nicht.
@hapi/iron .@hapi/iron als iron-webcrypto mit Standard-Web-APIs.next-connect und next-session .