iron-session JavaScript를위한 안전하고 무국적이며 쿠키 기반 세션 라이브러리입니다.

Clerk는 사용자를 인증하고 관리하기 위해 임베디 가능한 UI, Flexible API 및 Admin 대시 보드의 완벽한 제품군입니다.
7 분 안에 인증을 추가하십시오
세션 데이터는 서버 코드에 의해 무국적 방식으로 디코딩되는 서명 및 암호화 된 쿠키에 저장됩니다 (= 네트워크와 관련이 없음). 이것은 Ruby on Rails와 같은 프레임 워크에서 사용하는 것과 동일한 기술입니다.
온라인 데모 및 예제 : https://get-iron-session.vercel.app ?
다음 .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-session여기에 광범위한 예가 있습니다 : https://get-iron-session.vercel.app/.
세션을 얻으려면 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 > ;
} 온라인 데모에는 다양한 패턴과 예제가 있습니다. https://get-iron-session.vercel.app/.
✅ 생산 준비 및 유지 관리.
password 와 cookieName 두 가지 옵션이 필요합니다. 다른 모든 것은 자동으로 계산되며 일반적으로 변경할 필요가 없습니다. ****
password , 필수 : 쿠키를 암호화하는 데 사용되는 개인 키. 길이는 32 자 이상이어야합니다. https://1password.com/password-generator/를 사용하여 강력한 암호를 생성하십시오. password 다음과 같은 string 이거나 키가 증가하는 object 일 수 있습니다. {2: "...", 1: "..."} 암호 회전을 허용합니다. Iron-Session은 새 쿠키에 가장 높은 번호가 매겨진 키를 사용합니다.
cookieName , 필수 : 저장할 쿠키 이름
ttl , 선택 사항 : 몇 초 만에. 14 일에 해당하는 기본값. 이것을 0 으로 설정할 수 있고 철분이 쿠키로 허용되는 최대 값을 계산합니다.
cookieOptions , 선택 사항 : jshttp/쿠키에서 사용할 수있는 모든 옵션은 Set-Cookie 속성이 아닌 encode 제외하고 Serialize에서 사용할 수 있습니다. Mozilla Set-Cookie 속성 및 Chrome 쿠키 필드를 참조하십시오. 기본값 :
{
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>세션을 저장합니다. 이것은 비동기 작업입니다. 헤더가 클라이언트에게 보내기 전에 완료하고 기다려야합니다.
await session . save ( )session.destroy(): void세션을 파괴합니다. 이것은 쿠키 만 제거하므로 동기식 작동입니다. 헤더가 클라이언트에게 전송되기 전에 수행해야합니다.
session . destroy ( )session.updateConfig(sessionOptions: SessionOptions): void새로운 세션 옵션으로 세션 구성을 업데이트합니다. 적용하려면 Save ()를 계속 호출해야합니다.
sealData(data: unknown, { password, ttl }): Promise<string> 이것은 iron-session 전력을 공급하는 기본 방법 및 씰 메커니즘입니다. 원하는 data 밀봉하여 전달할 수 있습니다. 하나의 usecase는 Magic Links입니다. 로그인 할 사용자 ID가 포함 된 씰을 생성하여 웹 사이트의 경로로 보내기 (예 : /magic-login ). 받은 후에는 씰을 unsealData 로 안전하게 해독하고 사용자를 로그인 할 수 있습니다.
unsealData<T>(seal: string, { password, ttl }): Promise<T> 이것은 sealData 와 반대이며 원래 데이터를 다시 가져 오기 위해 씰을 디코딩 할 수 있습니다.
이렇게하면 세션이 무국적으로 만들어집니다. 데이터가 쿠키에서 전달되므로 세션 데이터를 저장하기 위해 서버 나 서비스가 필요하지 않습니다.
더 많은 정보는 동일한 기술을 사용하는 Ruby on Rails 웹 사이트에서도 확인할 수 있습니다.
일반적으로 기본적으로 서버의 세션에 대해 저장된 상태는 없으므로 세션은 즉시 무효화 (또는 "고객을 연결 해제") 할 수 없습니다. 그러나 대부분의 응용 프로그램에서 인증 된 요청을 받으면 첫 번째 단계는 사용자와 데이터베이스의 권한을 검증하는 것입니다. 따라서 고객 (또는 무효화 세션)을 쉽게 분리하려면 데이터베이스에 'isblocked`` 상태를 추가하고 고객을 차단하기 위해 UI를 만들 수 있습니다.
그런 다음 민감한 데이터를 읽거나 변경하는 요청을받을 때 마다이 플래그를 확인하십시오.
예, 쿠키에 묶이지 않은 sealData 및 unsealData 노출시킵니다. 이렇게하면 애플리케이션의 객체를 밀봉하고 설치하고 로그인 사용자로 씰을 이동할 수 있습니다.
별로 :
자신의 요구와 선호도에 따라 iron-session 귀하에게 적합하거나 맞지 않을 수도 있습니다.
@hapi/iron 만들기위한 기고자.@hapi/iron iron-webcrypto 으로 상환하기위한 Divyansh Singh.next-connect 과 next-session 구축했습니다.