iron-session 、JavaScript用の安全で、ステートレス、およびCookieベースのセッションライブラリです。

Clerkは、ユーザーを認証および管理するための埋め込み可能なUI、柔軟なAPI、および管理ダッシュボードの完全なスイートです。
7分で認証を追加します
セッションデータは、Statelessの方法でサーバーコードによってデコードされる署名済みおよび暗号化されたCookieに保存されます(=ネットワークが関係していません)。これは、Ruby on Railsのようなフレームワークで使用される同じ手法です。
オンラインデモと例:https://get-iron-session.vercel.app ?
next.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/をご覧ください。
croduction生産準備完了と維持。
2つのオプションが必要です。 passwordとcookieName 。他のすべては自動的に計算され、通常は変更する必要はありません。****
password 、必須:Cookieを暗号化するために使用される秘密鍵。少なくとも32文字の長さでなければなりません。 https://1password.com/password-generator/を使用して、強力なパスワードを生成します。 password 、パスワードの回転を可能にするために、次のようなキーをインクリメントするstringまたはキーを備えたobjectです。 {2: "...", 1: "..."} 。鉄セッションでは、新しいCookieに最高の数字のキーを使用します。
cookieName 、必須:保存するクッキーの名前
ttl 、オプション:秒単位。デフォルトで14日間に相当します。これを0に設定でき、鉄セッションはCookieによって最大許容値を計算します。
cookieOptions 、オプション:jshttp/cookie#serializeから利用可能なオプションは、セットクッキー属性ではないencodeを除きます。 Mozilla Set-Cookie属性とChrome Cookieフィールドを参照してください。デフォルト:
{
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セッションを破壊します。これは、Cookieのみを削除するため、同期操作です。ヘッダーがクライアントに送信される前に行う必要があります。
session . destroy ( )session.updateConfig(sessionOptions: SessionOptions): void新しいセッションオプションでセッションの構成を更新します。適用したい場合は、Save()を呼び出す必要があります。
sealData(data: unknown, { password, ttl }): Promise<string>これはiron-sessionを動かす根本的な方法とシールメカニズムです。それを使用して、必要なdataを密閉して渡すことができます。 1つのユーザーはマジックリンクです。ユーザーIDを含むシールを生成して、ログインしてウェブサイトのルート( /magic-loginなど)に送信します。受信したら、シールunsealDataで安全にデコードし、ユーザーにログインすることができます。
unsealData<T>(seal: string, { password, ttl }): Promise<T>これはsealDataの反対であり、シールをデコードして元のデータを取り戻すことができます。
これにより、セッションがステートレスになります。データはCookieで渡されるため、セッションデータを保存するためにサーバーやサービスは必要ありません。
詳細については、同じ手法を使用するRuby on Rails Webサイトにもご覧ください。
通常、デフォルトでサーバー上のセッションについて保存されている状態がないため、セッションを即座に無効にすることはできません(または「この顧客を切断する」)。ただし、ほとんどのアプリケーションでは、認証されたリクエストを受信した最初のステップは、データベース内のユーザーとそのアクセス許可を検証することです。したがって、顧客を簡単に切断する(またはセッションを無効にする)ために、データベースに「Isblocked」状態を追加し、顧客をブロックするUIを作成できます。
次に、機密データの読み取りまたは変更を伴うリクエストを受信するたびに、このフラグを確認してください。
はい、Cookieに結び付けられていないsealDataとunsealDataを公開します。このようにして、アプリケーション内の任意のオブジェクトをシールして解放し、シールを移動してユーザーをログインすることができます。
それほどではありません:
あなた自身のニーズと好みに応じて、 iron-sessionあなたに合っている場合と合わない場合があります。
@hapi/ironを作成するための貢献者。iron-webcryptoとして@hapi/ironを再実装したDivyansh Singh。next-connectとnext-sessionを構築しました。