Frontend باید دو لایهٔ Session را رعایت کند
Identity میتواند توکن Device و Account بینقص صادر کند. اگر وباپ آنها را یک cookie jar ببیند، مدل را در Edge خراب میکنید.
در اپ Next.js که این BC را مصرف میکند، یک request proxy پیوستگی Session را روی هر navigation تطبیقخورده مالک است. UI لاگین هنوز در React است. حقیقت هنوز در Identity است. کار Edge: ordering، refresh، و بهداشت cookie.
چهار 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 ≠ User | Reality ≠ access |
| Contact ≠ columns | Channelها lifecycle دارند |
| Citizenship ≠ attribute | Relationshipها تکثیر میشوند |
| Device Session ≠ Account Session | Client ≠ login |
| Verify ≠ establish | Methodها converge میشوند |
| Org / geo ≠ free text | Context ساختیافته است |
| Edge ≠ source of truth | Delivery مدل را رعایت میکند |
Frameworkها عوض میشوند. اگر جداسازیهای دامنه صادق بمانند، framework بعدی سیستمی را به ارث میبرد که هنوز با دنیا جور است.
از نو یا عمیقتر
برگردید به نقشهٔ کتاب یا وقتی باگ ترتیب cookie میگیرید دوباره Device Session در برابر User Account Session را ببینید.