JWT expired: ليش المستخدم يطلع له خطأ بعد ساعة؟

خطأ JWT expired في Supabase مع Lovable و Next.js: ليش الطلبات تفشل بعد ما يترك المستخدم الصفحة مفتوحة، وليش تطويل مدة التوكن حل خطير.

22 أكتوبر 2026 (11 جمادى الأولى 1448 هـ) · قراءة 3 دقائق · كتبها م. معاذ أحمد

المستخدم يفتح منتجك، يشتغل شوي، يترك الصفحة مفتوحة ويرجع لها بعد ساعة أو بعد ما يفتح اللابتوب، وفجأة ما يحفظ شي، والقوائم فاضية، وفي Console أو في سجل السيرفر: JWT expired. يسوي تحديث للصفحة، أو يسجّل خروج ودخول، فيرجع كل شي يشتغل. هذي علامة إن منتجك ما يجدّد جلسة المستخدم صح.

إيش يعني بالضبط

لما المستخدم يسجّل دخول في Supabase، ياخذ شيئين:

  • توكن الدخول (JWT): مثل بطاقة دخول مؤقتة، يرسلها المنتج مع كل طلب عشان قاعدة البيانات تعرف مين هو. افتراضيًا تنتهي بعد ساعة.
  • توكن التجديد: يستخدمه المنتج يطلب بطاقة جديدة قبل ما تنتهي القديمة، بدون ما يسجّل المستخدم دخول من جديد.

JWT expired معناه إن المنتج أرسل بطاقة منتهية، لأنه ما جدّدها، أو جدّدها في مكان واستخدم نسخة قديمة في مكان ثاني.

ليش يصير في المنتجات المبنية بالذكاء الاصطناعي

  • التوكن انحفظ نسخة: الكود أخذ التوكن مرة وحطه في متغير أو في localStorage بنفسه، وصار يرسله في كل طلب. المكتبة تجدّد التوكن الأصلي، والنسخة تبقى قديمة.
  • أكثر من نسخة من مكتبة Supabase: الكود ينشئ createClient في كل صفحة. كل نسخة تحاول تدير الجلسة لحالها، وتتعارض.
  • Next.js والسيرفر: في المنتجات المبنية بـ v0 أو Cursor على Next.js، الصفحات اللي تنبني على السيرفر تقرأ التوكن من الكوكيز. إذا ما فيه ملف proxy يجدّده، واسمه middleware قبل Next.js 16، السيرفر يستخدم توكن منتهي. Supabase عنده طريقة موثّقة لهذا مع مكتبة @supabase/ssr.
  • Edge Function أو سيرفرك يخزّن توكن المستخدم ويستخدمه بعد مدة.
  • ساعة الجهاز غلط: نادرة، لكن إذا ساعة جهاز المستخدم متقدمة أو متأخرة كثير، الحسبة تختلط.

كيف تتأكد بنفسك

  1. افتح منتجك، سجّل دخول، واتركه مفتوح أكثر من ساعة. أو سكّر اللابتوب وارجع له.
  2. بدون تحديث الصفحة، سوّ حركة تحفظ أو تجيب بيانات.
  3. افتح F12 ثم Network. إذا شفت طلبات ترجع 401 وفيها JWT expired، المشكلة موجودة.
  4. في الكود، ابحث عن access_token و localStorage و createClient. أي مكان ياخذ التوكن ويحفظه بنفسه، أو ينشئ نسخة جديدة من المكتبة، مشتبه فيه.

الحل اللي لا تسويه

  • تطويل مدة التوكن لأيام من إعدادات Supabase، وحدّها الأقصى أسبوع. الخطأ يختفي، لكن أي توكن ينسرق، من جهاز مشترك أو إضافة متصفح خبيثة، يبقى صالح كل هالمدة، وما تقدر توقفه بسهولة. المدة القصيرة حماية، مو مشكلة.
  • تسجيل خروج المستخدم كل ما طلع الخطأ. المنتج يصير «يطرد» الناس كل ساعة، وتخسر شغلهم اللي ما انحفظ.
  • إعادة المحاولة بنفس التوكن. بيرجع نفس الخطأ.

الحل الصح

  • نسخة وحدة من مكتبة Supabase للمنتج كله، في ملف واحد، وكل الصفحات تستخدمها.
  • خلّ المكتبة تدير الجلسة وتجدّدها بنفسها. لا تحفظ التوكن بيدك، وإذا تحتاجه، اطلبه من المكتبة وقت الطلب.
  • في Next.js، طبّق طريقة Supabase الرسمية للسيرفر: ملف proxy، أو middleware في الإصدارات قبل 16، يجدّد الجلسة في كل طلب ويكتب الكوكيز الجديدة.
  • في سيرفرك أو Edge Function، لا تخزّن توكن المستخدم. كل طلب يجي معه توكنه.

هذا جزء من أمان تسجيل الدخول، وفيه فحوصات ثانية في 5 ثغرات في تسجيل الدخول.

تبي أحد يتأكد منها؟

إذا المشكلة في مكان واحد واضح، مكالمة استشارية نلقى فيها النسخة القديمة من التوكن ونصلّحها معك. إذا الجلسات متلخبطة في أكثر من مكان، فيه الإصلاح المباشر. وإذا منتجك مبني بـ v0، شوف مشاكل v0 الأشهر.

عندك نفس المشكلة؟

علّمنا إيش صار بدون كلام تقني، ونقول لك إيش تحتاج وكم يكلّف.

ابدأ طلبك

بدون أي كلمة سر · عرض السعر مجاني