iron-session adalah perpustakaan sesi yang aman, tanpa kewarganegaraan, dan berbasis cookie untuk JavaScript.

Panitera adalah rangkaian lengkap UI yang dapat disembuhkan, API fleksibel, dan dasbor admin untuk mengotentikasi dan mengelola pengguna Anda.
Tambahkan otentikasi dalam 7 menit
Data sesi disimpan dalam cookie yang ditandatangani dan dienkripsi yang didekodekan oleh kode server Anda dengan cara yang tidak statisasi (= tidak ada jaringan yang terlibat). Ini adalah teknik yang sama yang digunakan oleh kerangka kerja seperti Ruby on Rails.
Demo dan Contoh Online: https://get-onon-session.vercel.app ?
Ditampilkan dalam dokumentasi berikutnya.js ️
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-sessionKami juga memiliki contoh yang luas di sini: https://get-iron-session.vercel.app/.
Untuk mendapatkan sesi, ada satu metode yang perlu diketahui: 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 > ;
} Kami memiliki banyak pola dan contoh yang berbeda pada demo online, lihat: https://get-iron-session.vercel.app/.
✅ Produksi siap dan dipelihara.
Dua opsi diperlukan: password dan cookieName . Yang lainnya secara otomatis dihitung dan biasanya tidak perlu diubah. ****
password , diperlukan : Kunci pribadi yang digunakan untuk mengenkripsi cookie. Panjangnya setidaknya 32 karakter. Gunakan https://1password.com/password-generator/ untuk menghasilkan kata sandi yang kuat. password dapat berupa string atau object dengan kunci tambahan seperti ini: {2: "...", 1: "..."} untuk mengizinkan rotasi kata sandi. Setrika-sesi akan menggunakan kunci bernomor tertinggi untuk cookie baru.
cookieName , wajib : nama cookie yang akan disimpan
ttl , Opsional : Dalam detik. Default dengan setara dengan 14 hari. Anda dapat mengatur ini ke 0 dan besi-sesi akan menghitung nilai maksimum yang diizinkan dengan cookie.
cookieOptions , Opsional : Opsi apa pun yang tersedia dari jshttp/cookie#serialize kecuali untuk encode yang bukan atribut set-cookie. Lihat atribut set-cookie Mozilla dan bidang kue krom. Default ke:
{
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>Menyelamatkan sesi. Ini adalah operasi asinkron. Itu harus dilakukan dan ditunggu sebelum header dikirim ke klien.
await session . save ( )session.destroy(): voidMenghancurkan sesi. Ini adalah operasi sinkron karena hanya menghilangkan cookie. Itu harus dilakukan sebelum header dikirim ke klien.
session . destroy ( )session.updateConfig(sessionOptions: SessionOptions): voidMemperbarui konfigurasi sesi dengan opsi sesi baru. Anda masih perlu menelepon save () jika Anda ingin mereka diterapkan.
sealData(data: unknown, { password, ttl }): Promise<string> Ini adalah metode yang mendasari dan mekanisme segel yang memberi kekuatan iron-session . Anda dapat menggunakannya untuk menyegel data apa pun yang Anda inginkan dan meneruskannya. Satu usecase adalah tautan ajaib: Anda menghasilkan segel yang berisi ID pengguna untuk login dan mengirimkannya ke rute di situs web Anda (seperti /magic-login ). Setelah diterima, Anda dapat dengan aman memecahkan kode segel dengan unsealData dan mencatat pengguna.
unsealData<T>(seal: string, { password, ttl }): Promise<T> Ini adalah kebalikan dari sealData dan memungkinkan Anda memecahkan kode segel untuk mendapatkan data asli kembali.
Ini membuat sesi Anda tidak memiliki kewarganegaraan: karena data dilewatkan dalam cookie, Anda tidak memerlukan server atau layanan apa pun untuk menyimpan data sesi.
Informasi lebih lanjut juga dapat ditemukan di situs web Ruby on Rails yang menggunakan teknik yang sama.
Sesi tidak dapat secara instan tidak valid (atau "lepaskan pelanggan ini") karena biasanya tidak ada keadaan yang disimpan tentang sesi di server secara default. Namun, di sebagian besar aplikasi, langkah pertama setelah menerima permintaan yang diautentikasi adalah memvalidasi pengguna dan izin mereka dalam database. Jadi, untuk dengan mudah memutuskan koneksi pelanggan (atau membatalkan sesi), Anda dapat menambahkan keadaan `terisblokir`` dalam database dan membuat UI untuk memblokir pelanggan.
Kemudian, setiap kali permintaan diterima yang melibatkan membaca atau mengubah data sensitif, pastikan untuk memeriksa bendera ini.
Ya, kami mengekspos sealData dan unsealData yang tidak terikat dengan cookie. Dengan cara ini Anda dapat menyegel dan melepaskan objek apa pun dalam aplikasi Anda dan memindahkan segel untuk masuk ke pengguna.
Tidak terlalu banyak:
Bergantung pada kebutuhan dan preferensi Anda sendiri, iron-session mungkin atau mungkin tidak cocok untuk Anda.
@hapi/iron .@hapi/iron sebagai iron-webcrypto menggunakan API web standar.next-connect dan next-session .