إنتقل إلى المحتوى الرئيسي

مشاكل المصادقة

نظرة عامة

يوضح هذا الدليل كيفية تشخيص وحل مشاكل المصادقة الشائعة.

أنظمة المصادقة

النظامالمستخدمونالآلية
OTPالعملاءSMS أو Telegram منفصل
Email/Passwordموظفي الشركاتSupabase Auth
Email/PasswordالمشرفينSupabase Auth

مشاكل OTP للعملاء

رمز OTP لا يصل

الأسباب المحتملة:

  1. رقم الهاتف غير صحيح
  2. مشكلة في مزود SMS Verify المحدد
  3. الرقم محظور من الشبكة
  4. تيليجرام غير مفعّل، خدمة البوت متوقفة، أو Chat ID غير مربوط بالرقم

الإجراءات:

  1. التحقق من الرقم:
SELECT phone, is_verified, created_at
FROM passengers
WHERE phone LIKE '%رقم الهاتف%';
  1. فحص حالة المزود المحدد. عند استخدام Twilio:
# التحقق من حالة Twilio
curl -X GET "https://verify.twilio.com/v2/Services/{ServiceSid}/VerificationCheck" \
-u "$TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN"
  1. فحص إعداد تيليجرام عند استخدام method=telegram:
curl -s "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/getMe"

تأكد أن المستخدم فتح بوت شام باص وأرسل /start، وأن الواجهة ترسل telegramChatId رقمي صالح.

  1. فحص خدمة بوت تيليجرام في Docker:
docker compose ps telegram-bot
docker compose logs --tail=120 telegram-bot

يجب أن تحتوي البيئة على TELEGRAM_BOT_TOKEN وSUPABASE_SERVICE_ROLE_KEY. عند مشاركة المستخدم رقمه مع البوت، تُحفظ العلاقة في جدول telegram_chat_links.

  1. إعادة إرسال OTP:
curl -X POST "https://verify.twilio.com/v2/Services/{ServiceSid}/Verifications" \
-d "To=+963xxxxxxxxx" \
-d "Channel=sms" \
-u "$TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN"

رمز OTP غير صحيح

الإجراءات:

  1. التأكد من عدم انتهاء صلاحية الرمز (10 دقائق)
  2. طلب رمز جديد
  3. التأكد من إدخال الرمز بشكل صحيح

حد المحاولات

إذا تجاوز المستخدم عدد المحاولات:

-- إعادة تعيين محاولات OTP
UPDATE passengers
SET otp_attempts = 0,
last_otp_attempt = NULL
WHERE phone = '+963xxxxxxxxx';

مشاكل لوحة التحكم

نسيان كلمة المرور

  1. استخدام رابط "نسيت كلمة المرور"
  2. إعادة تعيين من قاعدة البيانات (حالة طوارئ):
-- الحصول على معرف المستخدم
SELECT id, email FROM auth.users
WHERE email = 'user@company.com';

-- إعادة تعيين كلمة المرور (يتطلب Supabase Dashboard)

حساب مقفل

-- فحص حالة الحساب
SELECT
au.id,
au.email,
au.banned_until,
au.confirmation_sent_at
FROM auth.users au
WHERE au.email = 'user@company.com';

-- إلغاء الحظر
UPDATE auth.users
SET banned_until = NULL
WHERE email = 'user@company.com';

جلسة منتهية

الأعراض:

  • خطأ 401 Unauthorized
  • إعادة توجيه لصفحة تسجيل الدخول

الحل:

  • تسجيل الخروج وإعادة الدخول
  • مسح الكوكيز

مشاكل لوحة المشرفين

فقدان صلاحية المشرف

-- فحص صلاحيات المشرف
SELECT
au.id,
au.email,
a.role,
a.is_active
FROM admin_users a
JOIN auth.users au ON au.id = a.id
WHERE au.email = 'admin@shambus.com';

-- تفعيل حساب المشرف
UPDATE admin_users
SET is_active = true
WHERE id = 'admin_id';

صلاحيات ناقصة

-- تحديث دور المشرف
UPDATE admin_users
SET role = 'super_admin'
WHERE id = 'admin_id';

مشاكل Supabase Auth

التحقق من حالة Auth

# صحة خدمة Auth
curl -I https://your-project.supabase.co/auth/v1/health

مشاكل JWT

فحص الرمز:

  1. نسخ JWT token
  2. فك التشفير في jwt.io
  3. التحقق من:
    • exp: تاريخ الانتهاء
    • sub: معرف المستخدم
    • role: الدور

إعادة تعيين الجلسات

-- حذف جميع جلسات مستخدم
DELETE FROM auth.sessions
WHERE user_id = 'user_id';

المراقبة

تنبيهات المصادقة

مراقبة:

  • معدل فشل تسجيل الدخول
  • محاولات OTP المتكررة
  • أخطاء 401/403

سجلات المصادقة

-- محاولات تسجيل الدخول الفاشلة
SELECT * FROM audit_log
WHERE action = 'login_failed'
ORDER BY created_at DESC
LIMIT 20;

أدوات التشخيص

-- فحص شامل لحساب
SELECT
'auth' as source,
au.id,
au.email,
au.phone,
au.created_at,
au.last_sign_in_at
FROM auth.users au
WHERE au.email = 'user@example.com'
OR au.phone = '+963xxxxxxxxx';