iron-session é uma biblioteca de sessão segura, apátrida e baseada em biscoitos para JavaScript.

O funcionário é um conjunto completo de UIs incorporáveis, APIs flexíveis e painéis de administração para autenticar e gerenciar seus usuários.
Adicione autenticação em 7 minutos
Os dados da sessão são armazenados em cookies assinados e criptografados, que são decodificados pelo código do seu servidor de maneira sem estado (= nenhuma rede envolvida). Esta é a mesma técnica usada por estruturas como Ruby on Rails.
Demoção e exemplos online: https://get-iron-session.vercel.app ?
Apresentado na próxima documentação .
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-sessionTambém temos exemplos extensos aqui: https://get-iron-session.vercel.app/.
Para obter uma sessão, há um único método para 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 > ;
} Temos muitos padrões e exemplos diferentes na demonstração on-line, dê uma olhada: https://get-iron-session.vercel.app/.
✅ Produção pronta e mantida.
São necessárias duas opções: password e cookieName . Todo o resto é calculado automaticamente e geralmente não precisa ser alterado. ****
password , necessária : chave privada usada para criptografar o cookie. Tem que ter pelo menos 32 caracteres. Use https://1password.com/password-generator/ para gerar senhas fortes. password pode ser uma string ou um object com teclas de incremento como esta: {2: "...", 1: "..."} para permitir a rotação de senha. A sessão de ferro usará a chave numerada mais alta para novos cookies.
cookieName , requerido : Nome do cookie a ser armazenado
ttl , opcional : em segundos. Padrão para o equivalente a 14 dias. Você pode definir isso como 0 e a sessão de ferro calculará o valor máximo permitido pelos cookies.
cookieOptions , opcional : qualquer opção disponível no JSHTTP/Cookie#serialize, exceto para o encode , que não é um atributo de cookie. Veja Atributos Mozilla Set-Cookie e Campos de Cookies Chrome. Padrão para:
{
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>Salva a sessão. Esta é uma operação assíncrona. Deve ser feito e aguardado antes que os cabeçalhos sejam enviados ao cliente.
await session . save ( )session.destroy(): voidDestrói a sessão. Esta é uma operação síncrona, pois remove apenas o cookie. Isso deve ser feito antes que os cabeçalhos sejam enviados para o cliente.
session . destroy ( )session.updateConfig(sessionOptions: SessionOptions): voidAtualiza a configuração da sessão com novas opções de sessão. Você ainda precisa ligar para salvar () se deseja que eles sejam aplicados.
sealData(data: unknown, { password, ttl }): Promise<string> Este é o método subjacente e o mecanismo de vedação que alimenta iron-session . Você pode usá -lo para selar os data desejados e transmiti -los. Uma USECASE são links mágicos: você gera um selo que contém um ID de usuário para fazer login e envia-o para uma rota em seu site (como /magic-login ). Uma vez recebido, você pode decodificar com segurança o selo com unsealData e registrar o usuário.
unsealData<T>(seal: string, { password, ttl }): Promise<T> Este é o oposto do sealData e permite que você decodifique um selo para recuperar os dados originais.
Isso torna suas sessões sem estado: como os dados são passados em cookies, você não precisa de nenhum servidor ou serviço para armazenar dados de sessão.
Mais informações também podem ser encontradas no site Ruby on Rails, que usa a mesma técnica.
As sessões não podem ser instantaneamente invalidadas (ou "desconectar esse cliente"), pois normalmente não há nenhum estado armazenado sobre sessões no servidor por padrão. No entanto, na maioria dos aplicativos, a primeira etapa ao receber uma solicitação autenticada é validar o usuário e suas permissões no banco de dados. Portanto, para desconectar facilmente os clientes (ou invalidar sessões), você pode adicionar um estado `islbocked`` no banco de dados e criar uma interface do usuário para bloquear os clientes.
Em seguida, toda vez que uma solicitação é recebida que envolve leitura ou alteração de dados confidenciais, verifique esse sinalizador.
Sim, expojamos sealData e unsealData que não estão ligados a cookies. Dessa forma, você pode selar e solucionar qualquer objeto em seu aplicativo e mover vedantes para os usuários de login.
Não tanto:
Dependendo de suas próprias necessidades e preferências, iron-session pode ou não se encaixar em você.
@hapi/iron .@hapi/iron como iron-webcrypto usando APIs da web padrão.next-connect e next-session .