يعد iron-session مكتبة جلسة آمنة وغير جنسية ومستندة إلى ملفات تعريف الارتباط لـ JavaScript.

Clerk هو مجموعة كاملة من واجهة المستخدم القابلة للتضمين ، واجهات برمجة التطبيقات المرنة ، ولوحات معلومات المشرف لمصادقة المستخدمين وإدارتهم.
أضف المصادقة في 7 دقائق
يتم تخزين بيانات الجلسة في ملفات تعريف الارتباط الموقعة والتشفير التي يتم فك تشفيرها بواسطة رمز الخادم الخاص بك بطريقة عديمة الجنسية (= لا توجد شبكة معنية). هذه هي نفس التقنية التي تستخدمها الأطر مثل Ruby on Rails.
العرض التوضيحي عبر الإنترنت والأمثلة: https://get-iron-cent.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-cent.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-sent.vercel.app/.
✅ الإنتاج جاهز وصيانته.
هناك خياران مطلوبان: password و cookieName . يتم حساب كل شيء آخر تلقائيًا وعادة ما لا يحتاج إلى تغيير. ****
password ، مطلوبة : المفتاح الخاص المستخدم لتشفير ملف تعريف الارتباط. يجب أن يكون طولها 32 حرفًا على الأقل. استخدم https://1password.com/password-generator/ لإنشاء كلمات مرور قوية. يمكن أن تكون password إما string أو object ذو مفاتيح متزايدة مثل هذا: {2: "...", 1: "..."} للسماح بتناوب كلمة المرور. سيستخدم الجلسة الحديدية أعلى مفتاح مرقمة لملفات تعريف الارتباط الجديدة.
cookieName ، مطلوب : اسم ملف تعريف الارتباط الذي سيتم تخزينه
ttl ، اختياري : في ثوان. الافتراضي إلى ما يعادل 14 يوما. يمكنك ضبط هذا على 0 وسيقوم الجلسة الحديدية بحساب القيمة القصوى المسموح بها بواسطة ملفات تعريف الارتباط.
cookieOptions ، اختياري : أي خيار متاح من JSHTTP/Cookie#Serialize باستثناء encode الذي ليس سمة cookie. انظر سمات 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يقوم بتحديث تكوين الجلسة بخيارات جلسة جديدة. لا تزال بحاجة إلى الاتصال بحفظ () إذا كنت تريد تطبيقها.
sealData(data: unknown, { password, ttl }): Promise<string> هذه هي الطريقة الأساسية وآلية الختم التي تشغل iron-session . يمكنك استخدامه لإغلاق أي data تريدها وتمريرها. إحدى الروابط السحرية هي: يمكنك إنشاء ختم يحتوي على معرف مستخدم لتسجيل الدخول وإرساله إلى طريق على موقع الويب الخاص بك (مثل /magic-login ). بمجرد استلامها ، يمكنك فك تشفير الختم بأمان باستخدام unsealData وتسجيل المستخدم فيه.
unsealData<T>(seal: string, { password, ttl }): Promise<T> هذا هو عكس sealData ويسمح لك بفك تشفير ختم لاستعادة البيانات الأصلية.
هذا يجعل جلساتك عديمة الجنسية: نظرًا لأن البيانات تنتقل في ملفات تعريف الارتباط ، فأنت لا تحتاج إلى أي خادم أو خدمة لتخزين بيانات الجلسة.
يمكن أيضًا العثور على مزيد من المعلومات على موقع Ruby On Rails الذي يستخدم نفس التقنية.
لا يمكن إبطال الجلسات على الفور (أو "افصل هذا العميل") حيث لا توجد عادة حالة مخزنة حول الجلسات على الخادم افتراضيًا. ومع ذلك ، في معظم التطبيقات ، تتمثل الخطوة الأولى عند تلقي طلب مصادق في التحقق من صحة المستخدم وأذوناته في قاعدة البيانات. لذلك ، لفصل العملاء بسهولة (أو إبطال الجلسات) ، يمكنك إضافة حالة "isblocked`` في قاعدة البيانات وإنشاء واجهة مستخدم لمنع العملاء.
بعد ذلك ، في كل مرة يتم فيها استلام طلب يتضمن قراءة أو تغيير البيانات الحساسة ، تأكد من التحقق من هذه العلامة.
نعم ، نحن نعرض sealData و unsealData التي لا ترتبط بملفات تعريف الارتباط. وبهذه الطريقة ، يمكنك ختم أي كائن في التطبيق الخاص بك ونقله وتنقل الأختام لتسجيل الدخول إلى المستخدمين.
ليس كثيرا:
اعتمادًا على احتياجاتك وتفضيلاتك ، قد يناسبك iron-session .
@hapi/iron .@hapi/iron مثل iron-webcrypto باستخدام واجهات برمجة تطبيقات الويب القياسية.next-connect next-session .