رفتن به محتوای اصلی
مصطفی عفتی

درباره این پلتفرم

دفتر کاری زنده برای تجربه‌های مهندسی

این پلتفرم مهندسی شخصی مصطفی عفتی است؛ جایی برای تبدیل تجربه عملی به نوشتار روشن، یادگیری ساختاریافته و محصولات دیجیتال کاربردی.

همکار دانشجویی

  • خانم زهرا احسانی

    دانشجوی سابق · مشارکت‌کننده در توسعه پلتفرم

    خانم زهرا احسانی در دوران تحصیل روی بخش‌هایی از این پلتفرم کار کرد و با مشارکت‌های دقیق و کاربردی به توسعه آن کمک کرد. خوشحالم که اینجا از کارش قدردانی می‌کنم.

اینجا چه پیدا می‌کنید

  • مقاله‌ها، کتاب‌ها، آموزش‌ها و اسنیپت‌های کاربردی.
  • دوره‌ها و مسیرهای یادگیری مبتنی بر تجربه‌های واقعی مهندسی.
  • مطالعات موردی، پروژه‌های متن‌باز، آزمایش‌ها و انتشار محصولات.

با طراحی آگاهانه

  • تجربه دو‌زبانه فارسی و انگلیسی با پشتیبانی بومی از RTL.
  • رابط‌های سازگار با تم و کیبورد، با یک زبان بصری متمرکز.
  • توسعه محتوا و محصول به‌عنوان یک سیستم یکپارچه و نسخه‌بندی‌شده.

این پلتفرم پیوسته در حال تکامل است. بعضی بخش‌ها محصولاتی کامل‌اند و برخی دیگر آزمایش‌های فعالی که هم‌زمان با پیشرفت کار بهتر می‌شوند.

Frontend Session Edge

چطور Next.js edge proxy کوکی Device و User Account را هم‌زمان نگه می‌دارد — اول resolve Device، بعد refresh Account، با single-flight برای جلوگیری از race.
Mostafa Effati4 دقیقه مطالعهsoftware-architecture

Frontend باید دو لایهٔ Session را رعایت کند

Identity می‌تواند توکن Device و Account بی‌نقص صادر کند. اگر وب‌اپ آن‌ها را یک cookie jar ببیند، مدل را در Edge خراب می‌کنید.

در اپ Next.js که این BC را مصرف می‌کند، یک request proxy پیوستگی Session را روی هر navigation تطبیق‌خورده مالک است. UI لاگین هنوز در React است. حقیقت هنوز در Identity است. کار Edge: ordering، refresh، و بهداشت cookie.

نقش Cookieمعنی
Device accessاثبات کوتاه‌عمر client شناخته‌شده (dsid)
Device refreshراز چرخان Device Family
User accessاثبات کوتاه‌عمر Account لاگین‌شده (uaid)
User refreshراز چرخان Account Session Family

HttpOnly، Secure، SameSite=lax. Expiry از JWT exp پیروی می‌کند تا browser و proxy روی «stale» توافق داشته باشند.

Proxy در هر Navigation چه می‌کند

اگر Device refresh شکست بخورد، Device Session جدید بساز. اگر User refresh شکست بخورد یا بعد از آن Device معتبری نباشد، cookieهای User را پاک کن — با half-authenticated state ادامه نده.

دید همان Navigation

فقط با Set-Cookie refresh کردن برای Server Componentهای همین request کافی نیست: آن‌ها هدر Cookie ورودی را می‌خوانند.

پس proxy قبل از NextResponse.next هدر Cookie آپ‌استریم را با مقادیر جدید (یا حذف) بازمی‌سازد. Browser همچنان برای navigation بعدی Set-Cookie می‌گیرد. یک round-trip، نمای سازگار.

Single-flight در برابر Refresh موازی

HTML، RSC و prefetch می‌توانند هم‌زمان توکن منقضی ببینند. بدون dedupe، همه refresh می‌زنند → reuse / race / latency اضافه.

Mapهای single-flight درون‌پردازشی با کلید هویت توکن: اولین caller کار می‌کند؛ بقیه همان Promise را await می‌کنند. این فقط یک Node isolate را پوشش می‌دهد. Deploy چنداینستنس هنوز به صحت family rotation در Identity وابسته است؛ Edge فقط stampede داخل یک process را می‌گیرد.

Route Policy نازک می‌ماند

مسیرهای guest-only (مثلاً password reset) وقتی User Account Session زنده است redirect می‌شوند. گیت‌های logged-in وقتی نیست به login می‌روند. Home محصول در برابر dashboard انتخاب محصول است — مدل Session نباید اهمیت بدهد.

بعضی APIهای قدیمی محصول ممکن است تا convergence هنوز cookie سازگاری جدا داشته باشند؛ matcher می‌تواند آن مسیرها را خارج کند تا Identity proxy با آن‌ها نجنگد. این واقعیت migration است، نه معماری دوم.

چه چیزی را در Frontend نگذارید

  • Client secret مربوط به provider
  • Password hashing
  • Session «نرم» با ساختن user id در localStorage
  • Refresh مربوط به Account قبل از Device

Edge کلاینت مراقب Identity است — نه یک Identity Service مینیاتوری.

بستن کتاب

در نُه فصل، قوس همان حرکت است که تکرار می‌شود:

جداسازیچرا
Person ≠ UserReality ≠ access
Contact ≠ columnsChannelها lifecycle دارند
Citizenship ≠ attributeRelationshipها تکثیر می‌شوند
Device Session ≠ Account SessionClient ≠ login
Verify ≠ establishMethodها converge می‌شوند
Org / geo ≠ free textContext ساخت‌یافته است
Edge ≠ source of truthDelivery مدل را رعایت می‌کند

Frameworkها عوض می‌شوند. اگر جداسازی‌های دامنه صادق بمانند، framework بعدی سیستمی را به ارث می‌برد که هنوز با دنیا جور است.

از نو یا عمیق‌تر

برگردید به نقشهٔ کتاب یا وقتی باگ ترتیب cookie می‌گیرید دوباره Device Session در برابر User Account Session را ببینید.

اسناد مرتبط

منوی دستور

↑ ↓برای حرکت · Enter برای انتخاب · Esc برای بستن
ناوبری
اقدامات

Esc برای بستن · ⌘K برای باز/بسته کردن