Vibe Coding — تطبيقك الأول دون معرفة البرمجة — 6. حسابات المستخدمين وتسجيل الدخول

11 min read min de lecture
الفصل 06

حسابات المستخدمين وتسجيل الدخول

الفصل 6 من 10 · 60%

أهداف هذا الفصل

  • فهم متى يصبح حساب المستخدم ضروريًا فعلًا
  • اختيار طريقة تسجيل دخول مناسبة لمستخدميك
  • دمج المصادقة عبر خدمة جاهزة، دون برمجة

الرسالة التي تغيّر كل شيء

بعد أسبوع من النشر، يتلقى توم الملاحظة الأكثر تكرارًا. لينا، تلميذة في الصف الأول الإعدادي، تكتب له: «أستاذ، أشّرت كل عاداتي على حاسوب مركز التوثيق، وفي المساء على هاتفي، كان كل شيء قد اختفى!». يفهم توم فورًا: لقد اختار التخزين المحلي في الفصل 3، وlocalStorage يحفظ البيانات في متصفح كل جهاز. حاسوب مركز التوثيق وهاتف لينا عالمان منفصلان لا يتحدثان. ولكي يتبع التطبيق لينا في كل مكان، يجب أن يستطيع التعرف عليها — والتعرف على شخص ما، على الويب، يسمى حساب مستخدم.

تذكّر: في الفصل 3، كان «حساب المستخدم» ضمن قائمة الكلمات الفخ الممنوعة من نسختك الأولى. لم يكن ذلك منعًا نهائيًا، بل مسألة توقيت. توم بنى أولًا، ونشر، وجمع ملاحظات حقيقية. الآن لم تعد الحاجة فرضية: إنها الطلب رقم واحد لدى مستخدميه. هذا هو الترتيب الصحيح بالضبط — التعقيد يبرَّر بحاجة مثبتة، لا أبدًا بـ«تحسبًا». وسترى أن هذا التعقيد، إذا أُحسن التعامل معه، في متناولك تمامًا.

المصادقة: ما يحدث فعلًا

ثلاث كلمات مفردات ستحوّل حواراتك مع الذكاء الاصطناعي حول هذا الموضوع. المصادقة هي إثبات من أنت («أنا فعلًا lina@college.fr»). الجلسة هي البقاء معروفًا لفترة دون الاضطرار إلى الإثبات عند كل نقرة — هي ما يجعلك لا تعيد تسجيل الدخول كل ثلاثين ثانية. التفويض هو ما يحق لك رؤيته أو فعله بعد التعرف عليك («لينا ترى عاداتها هي، لا عادات الآخرين»). عندما تستخدم هذه الكلمات في موجّهاتك، سيعرف الذكاء الاصطناعي بالضبط عمّا تتحدث.

خلف شاشة تسجيل دخول بسيطة يختبئ في الحقيقة نظام كامل: التسجيل، الدخول، الخروج، الاسترداد عند النسيان، الحماية من الروبوتات، التخزين الآمن لبيانات الاعتماد... بناء كل ذلك بنفسك طويل، وخصوصًا خطير: أدنى خطأ يعرّض بيانات مستخدميك. الخبر السار أن لا أحد يبنيه بنفسه اليوم — ولا حتى المحترفون. الجميع يعتمد على خدمات متخصصة حلّت المشكلة مرة واحدة وإلى الأبد.

إن اقترح عليك الذكاء الاصطناعي يومًا «إنشاء نظام تسجيل دخول منزلي» بجدول كلمات مرور، ارفض بأدب واطلب صراحة خدمة مصادقة معروفة. تخزين كلمات المرور بنفسك هو خطأ الأمان رقم واحد لدى المبتدئين — وهو قابل للتجنب كليًا.

خدمات المصادقة الجاهزة

تسمى هذه الخدمات أحيانًا BaaS (Backend as a Service): توفر لتطبيقك لبنات الخادم التي يحتاجها — ومنها المصادقة — دون أن تضطر إلى إدارة خادم. تنشئ حسابًا لديهم، تسترد مفتاحين، ويفوّض تطبيقك إليهم كل العمل الحساس. ثلاثة أسماء تتكرر في كل مكان، والذكاء الاصطناعي يحفظها عن ظهر قلب:

Supabaseمفتوح المصدر، سخي في الباقة المجانية، ويجمع المصادقة وقاعدة البيانات معًا — عملي للفصل التالي. خيار توم.
Firebaseخدمة Google، منتشرة جدًا وموثقة جدًا. ممتازة أيضًا، مع منظومة موجهة أكثر نحو Google.
Clerkمتخصص 100% في المصادقة، بشاشات تسجيل دخول جاهزة وأنيقة جدًا. مثالي إن أردت أجمل نتيجة بأسرع وقت.

في هذه الدورة، سنتابع توم على Supabase: عرضه المجاني يغطي بسعة تطبيق صف دراسي، ووجود المصادقة وقاعدة البيانات في المكان نفسه سيبسّط الفصل 7. لكن احفظ المبدأ أكثر من الاسم — المنهجية التي ستتعلمها تنطبق حرفيًا لدى المنافسين.

أي طريقة تسجيل دخول لمستخدميك؟

توجد ثلاث طرق كبرى لتسجيل الدخول، والخيار الصحيح يعتمد كليًا على من هم مستخدموك. كلمة المرور الكلاسيكية عالمية لكنها مزعجة: الناس ينسونها، ويعيدون استخدامها في كل مكان، ويجب إدارة الاسترداد. تسجيل الدخول عبر Google أو Apple («OAuth») مريح... بشرط أن يملك مستخدموك حساب Google يستخدمونه فعلًا. الرابط السحري (magic link) يلغي كلمة المرور كليًا: يُدخل المستخدم بريده، يتلقى رابطًا، ينقر، وها هو متصل.

  • كلمة المرور: عالمية، لكن النسيان متكرر وإدارة الاسترداد إلزامية.
  • تسجيل الدخول عبر Google / Apple: نقرة واحدة وانتهى — إن كان مستخدموك يملكون (ويستخدمون) هذه الحسابات.
  • الرابط السحري: لا شيء يُحفظ، لا شيء يُنسى. مثالي للمستخدمين العرضيين أو الصغار. الشرط الوحيد: الوصول إلى صندوق البريد.

يختار توم الرابط السحري: تلاميذه جميعًا لديهم عنوان توفره المدرسة، و«نسيت كلمة المرور» كانت ستصبح حياته الثانية. اطرح السؤال نفسه عن تطبيقك: أي طريقة تخلق أقل احتكاك لمستخدميك أنت؟ لا توجد إجابة صحيحة عالمية، فقط إجابة صحيحة لجمهورك.

sequenceDiagram
  participant E as التلميذ
  participant A as تطبيق توم
  participant S as خدمة Supabase
  E->>A: يُدخل عنوان بريده الإلكتروني
  A->>S: يطلب رابطًا سحريًا
  S-->>E: يرسل البريد مع الرابط
  E->>A: ينقر على الرابط المستلم
  A-->>E: جلسة مفتوحة وعادات معروضة
مسار الرابط السحري: لا كلمة مرور، فقط بريد إلكتروني ونقرة.

دمج المصادقة مع الذكاء الاصطناعي

المنهجية في ثلاثة أزمنة: إنشاء مشروعك على Supabase (حساب، نقرة «New project»)، استرداد مفتاحي الوصول، ثم الطلب من الذكاء الاصطناعي توصيل كل ذلك. وكما في النشر بالفصل 5، لا تحتاج إلى حفظ الإجراء — تطلب دليلًا خطوة بخطوة مناسبًا لمستواك. إليك موجّه توم الكامل:

PROMPT
أريد إضافة حسابات مستخدمين إلى تطبيقي لتتبع العادات.
السياق: تطبيق HTML/CSS/JS منشور على Vercel، البيانات في localStorage حاليًا.
استخدم Supabase Auth مع تسجيل الدخول بالرابط السحري، دون كلمة مرور.
ما أريده:
1. شاشة تسجيل دخول بسيطة: حقل بريد إلكتروني + زر «استلام رابطي»
2. بعد النقر على الرابط المستلم بالبريد، يعود المستخدم إلى التطبيق متصلًا
3. زر «تسجيل الخروج» غير لافت أعلى الصفحة
4. إن لم يكن المستخدم متصلًا، يرى شاشة الدخول؛ وإلا فعاداته
هام: لا تلمس البيانات بعد — نُبقي localStorage حاليًا.
أرشدني أولًا لإنشاء مشروع Supabase وإيجاد مفتاحيّ، خطوة بخطوة، قبل كتابة أي سطر كود.

السطر «لا تلمس البيانات بعد» استراتيجي. إضافة المصادقة وترحيل البيانات معًا تغييران كبيران دفعة واحدة — بالضبط ما علّمك الفصل 4 تجنبه. هذا الفصل يوصّل التعرف على المستخدمين؛ والفصل 7 سيتولى بياناتهم. درجة واحدة في كل مرة، حتى عندما يكون السلّم كبيرًا.

مفاتيح API: أسرارك الأولى

عند إنشاء مشروع Supabase، ستقابل مفتاحين. المفتاح العام (المسمى «anon») يعرّف تطبيقك: يمكنه العيش في كود المتصفح، فهو مصمم لذلك. المفتاح السري (المسمى «service_role») يمنح كل الصلاحيات على مشروعك: يجب ألا يظهر أبدًا، أبدًا في كود مرئي للمتصفح. هذه الأسرار تُرتَّب في ملف خاص، الـ.env، الذي يتجاهله Git:

bash
# ملف .env — يبقى على جهازك، لا يُنشر أبدًا
SUPABASE_URL=https://tonprojet.supabase.co
SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIs...   # عام: مقبول في المتصفح
SUPABASE_SERVICE_ROLE_KEY=eyJzZXJ2aWNl...   # سري: أبدًا في المتصفح
عند الشك، اطرح السؤال كما هو على الذكاء الاصطناعي: «هل يمكن لهذا المفتاح الظهور في كود المتصفح، نعم أم لا؟». سؤال ثنائي، سيجيب عنه دون لبس. سنعود إلى الأسرار بعمق في الفصل 9 — حاليًا، احفظ: مفتاح service_role لا يغادر الخادم أبدًا.

اختبار المسار كمستخدم

المصادقة تُختبر من البداية إلى النهاية، دون اختصار: أدخل عنوانًا حقيقيًا، اذهب لجلب البريد (انظر أيضًا في الرسائل غير المرغوبة، فهي العائق الكلاسيكي)، انقر الرابط، تحقق أنك وصلت متصلًا. ثم سجّل الخروج وأعد الكرّة. وأخيرًا، الاختبار الحاسم: افتح التطبيق في متصفحين مختلفين بعنوانين مختلفين، وتحقق أن لكلٍّ جلسته الخاصة. إن تعثّر شيء، طبّق منهجية الفصل 4 — تقرير خلل من أربع نقاط. إليك النسخة المعدّلة للمصادقة:

PROMPT
خلل اتصال يجب تصحيحه.
ما أفعله: أُدخل عنواني، أتلقى بريد الرابط السحري، أنقر على الرابط.
ما توقعته: العودة إلى التطبيق متصلًا.
ما يحدث: أعود إلى التطبيق لكنني ما زلت أرى شاشة تسجيل الدخول.
الخطأ في وحدة التحكم: [ألصق هنا السطر الأحمر الحرفي، إن وُجد]
تحقق بالأولوية من إعداد عناوين URL لإعادة التوجيه في Supabase — عنوان موقعي المنشور هو https://mon-app.vercel.app — وقل لي ماذا أصحح، خطوة بخطوة.

هذا الموجّه يُظهر انعكاسًا من مستوى أعلى: توم يوجّه التشخيص («تحقق بالأولوية من عناوين إعادة التوجيه») لأنها السبب الكلاسيكي لهذا العرَض — الخدمة تعيد المستخدم إلى عنوان لا يطابق الموقع المنشور. لست ملزمًا بمعرفة هذه الأسباب الكلاسيكية: اسأل الذكاء الاصطناعي «ما الأسباب الثلاثة الأكثر شيوعًا لهذه المشكلة؟» وسيسردها لك.

عناوين البريد الإلكتروني لمستخدميك بيانات شخصية — وهي أكثر حساسية لأن تلاميذ توم قاصرون. القاعدة الذهبية: لا تجمع إلا الضروري المحض (هنا، البريد لا غير)، وإن كان تطبيقك يُستخدم في إطار مدرسي، فتحدث مع مؤسستك. الاقتصاد في البيانات التزام وحماية معًا.

ما ينتظرك في الفصل التالي

في نهاية هذه المرحلة، يتعرف تطبيق توم على كل تلميذ... لكن عاداتهم ما زالت تعيش في localStorage كل جهاز. تستطيع لينا الاتصال في مركز التوثيق وعلى هاتفها، لكنها لا ترى فيهما البيانات نفسها بعد. ينقص النصف الثاني من الحل: قاعدة بيانات على الإنترنت، تُخزَّن فيها عادات كل حساب مرة واحدة وإلى الأبد، متاحة من أي مكان. هذا كل برنامج الفصل 7 — وقد وضعت للتو الأساس المثالي لاستقباله.

🛠️ حان دورك

السياق

يخصص توم أمسية لإضافة تسجيل الدخول بالرابط السحري إلى تطبيقه. هدفه محدود عمدًا: في نهاية الجلسة، يجب أن يستطيع تلميذ تسجيل الدخول والخروج — دون لمس البيانات، التي تبقى في localStorage. نفّذ الورشة نفسها بالضبط على تطبيقك: إنها أول لبنة «جادة» في مسارك، وسترى أنها أيسر مما تبدو.

التعليمات

  1. أنشئ حساب Supabase (أو Firebase/Clerk) ومشروعًا جديدًا، ثم حدد موقع مفتاحيك.
  2. اختر طريقة تسجيل الدخول بحسب مستخدميك أنت: رابط سحري، كلمة مرور أو Google.
  3. أرسل إلى الذكاء الاصطناعي موجّه الدمج مع التشديد على «لا تلمس البيانات بعد».
  4. اختبر المسار الكامل: التسجيل، البريد المستلم (افحص الرسائل غير المرغوبة)، الدخول، الخروج، إعادة الدخول.
  5. افتح التطبيق في متصفحين بعنوانين مختلفين وتحقق أن الجلستين منفصلتان فعلًا.
  6. عندما يعمل كل شيء، أجرِ commit (أو نقطة استعادة): «مصادقة عاملة».
تلميح — إن أعادك الرابط السحري إلى شاشة تسجيل الدخول بدل توصيلك، فهي دائمًا تقريبًا مشكلة عنوان إعادة توجيه في إعداد Supabase: يجب أن يرد فيه عنوان موقعك المنشور بدقة. أعطِ هذا المسار للذكاء الاصطناعي أولًا.

باختصار

  • localStorage = بيانات لكل جهاز؛ لمتابعة مستخدم في كل مكان، يلزم حساب.
  • تعقيد الحساب يبرَّر بحاجة مستخدم مثبتة — لا أبدًا بـ«تحسبًا».
  • المصادقة = إثبات من أنت؛ الجلسة = البقاء معروفًا؛ التفويض = ما يحق لك رؤيته.
  • لا نبني نظام كلمات مرور بأنفسنا أبدًا: Supabase أو Firebase أو Clerk يتكفلون به.
  • الرابط السحري يلغي كلمات المرور: مثالي للمستخدمين الصغار أو العرضيين.
  • المفتاح العام «anon»: مقبول في المتصفح؛ مفتاح «service_role»: أبدًا — يعيش في الـ.env.
  • افصل الأوراش: هذا الفصل يوصّل المصادقة، والتالي سيرحّل البيانات.

اختبار — تحقّق من فهمك

1. لماذا تختفي بيانات لينا من جهاز إلى آخر؟

localStorage محلي بحكم تعريفه: لكل متصفح نسخته الخاصة، ولا شيء ينتقل بين الأجهزة. هذه هي المشكلة التي ستحلها الحسابات + قاعدة البيانات.

2. ما الفرق بين المصادقة والتفويض؟

أولًا يتم التعرف عليك (المصادقة)، ثم تُطبَّق حقوقك (التفويض): لينا ترى عاداتها، لا عادات الآخرين.

3. يقترح عليك الذكاء الاصطناعي إنشاء جدول كلمات مرور منزلي. ماذا تفعل؟

تخزين كلمات المرور بنفسك هو خطأ الأمان الكلاسيكي للمبتدئ. الخدمات المتخصصة حلّت هذه المشكلة بأمان — فوّض إليها هذا العمل الحساس.

4. لماذا يختار توم الرابط السحري لتلاميذه؟

طريقة الدخول الصحيحة هي التي تخلق أقل احتكاك لمستخدميك أنت. لتلاميذ إعدادية مجهزين ببريد مدرسي، صفر كلمة مرور = صفر «نسيت كلمة المرور».

5. أي من هذه المفاتيح يجب ألا يظهر أبدًا في كود المتصفح؟

مفتاح service_role يمنح كل الصلاحيات على مشروعك. يعيش في الـ.env، جهة الخادم فقط. أما مفتاح anon فمصمم ليكون مرئيًا في المتصفح.

Auteur(s)

R

REHOUMA Haythem

Haythem Rehouma est un ingénieur et architecte IA et cloud, formateur et enseignant technique, avec un profil orienté IA médicale, AWS, MLOps, LLM/RAG et vision par ordinateur.