<
>
COTREE
كود ينمو معك

Cotree · كود ينمو معك

Firebase Phone Auth: لماذا تفشل رسائل OTP بسبب الخطأ 39 وكيفية حل المشكلة؟

يواجه مطوّرون حول العالم مشكلات في خدمة المصادقة عبر الهاتف في Firebase، حيث يظهر الخطأ: An internal error has occurred. [ Error code:39 ] عند إرسال رموز التحقق إلى أرقام حقيقية، بينما تعمل الأرقام التجريبية بصورة طبيعية. في هذا المقال، نوضح المعنى الفعلي للخطأ، والأسباب التي تؤدي إلى ظهوره، والحلول التي ثبتت فعاليتها لمعالجة المشكلة.

ويتطلب ذلك تنفيذ الخطوات الآتية:

تتضمن الإعدادات المطلوبة القيم الآتية:

com.google.android.recaptcha:recaptcha

الحل الثاني: استخدام مزوّد خارجي لإرسال رموز التحقق OTP

تعتمد الفكرة على إنشاء نظام تحقق خاص باستخدام Cloud Functions ومزوّد خارجي لإرسال الرسائل.

تتكون آلية العمل من مرحلتين أساسيتين:

أولًا: إنشاء رمز التحقق وإرساله

تقوم Cloud Function بإنشاء رمز تحقق لمرة واحدة (OTP)، ثم تخزّن بصمته المشفّرة (Hash) فقط، مع تحديد مدة صلاحية تبلغ خمس دقائق.

كما تفرض قيودًا أمنية تشمل:

بعد ذلك، يُرسل الرمز عبر مزوّد محلي أو إقليمي لخدمات المراسلة، مع تفضيل WhatsApp كخيار أول ورسائل SMS كخيار احتياطي، إذا كان ذلك مدعومًا من المزوّد المستخدم.

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

ثانيًا: التحقق من الرمز وتسجيل الدخول

تتولى Cloud Function ثانية التحقق من الرمز الذي أدخله المستخدم.

إذا لم يكن لدى المستخدم حساب في Firebase، تنشئ الوظيفة حسابًا مرتبطًا برقم هاتفه، ثم تنشئ رمز مصادقة مخصصًا (Custom Token).

بعد ذلك، يسجّل التطبيق الدخول باستخدام:

signInWithCustomToken

وبهذه الطريقة، يمكنك الاستمرار في استخدام حسابات Firebase وقواعد أمان Firestore وبقية الخدمات المرتبطة بها، دون الحاجة إلى الاعتماد على مسار التحقق الأصلي عبر SMS.

ويجب منح حساب الخدمة الذي تستخدمه Cloud Functions الدور:

Service Account Token Creator

على حساب الخدمة نفسه، حتى يتمكن من إنشاء رموز المصادقة المخصصة.

في هذا التصميم، تبقى خدمة Firebase Phone Authentication خيارًا احتياطيًا، بدلًا من الاعتماد عليها بوصفها المسار الأساسي للتحقق.

الخلاصة

الخطأ 39 في Firebase Phone Authentication قد ينتج عن قيود إقليمية وقيود مرتبطة بشركات الاتصالات تؤثر في مسار التحقق الاحتياطي، وليس بالضرورة عن وجود مشكلة في الشيفرة البرمجية للتطبيق.

يعتمد الحل الأنسب على طريقة توزيع تطبيقك واحتياجات المستخدمين:

يوفر الحل الثاني تحكمًا أكبر في مزوّد الرسائل وتكاليف الإرسال وآلية التحقق، لكنه يتطلب تنفيذًا آمنًا وإدارة دقيقة لمحاولات التحقق ومعدلات الطلبات.

إذا كنت تواجه هذه المشكلة وتحتاج إلى المساعدة في معالجتها، يمكنك التواصل معنا عبر البريد الإلكتروني:

info@cotreeiq.com

Cotree | Software Solutions

المزيد من الأخبار