مشاكل المصادقة
نظرة عامة
يوضح هذا الدليل كيفية تشخيص وحل مشاكل المصادقة الشائعة.
أنظمة المصادقة
| النظام | المستخدمون | الآلية |
|---|---|---|
| OTP | العملاء | SMS أو Telegram منفصل |
| Email/Password | موظفي الشركات | Supabase Auth |
| Email/Password | المشرفين | Supabase Auth |
مشاكل OTP للعملاء
رمز OTP لا يصل
الأسباب المحتملة:
- رقم الهاتف غير صحيح
- مشكلة في مزود SMS Verify المحدد
- الرقم محظور من الشبكة
- تيليجرام غير مفعّل، خدمة البوت متوقفة، أو Chat ID غير مربوط بالرقم
الإجراءات:
- التحقق من الرقم:
SELECT phone, is_verified, created_at
FROM passengers
WHERE phone LIKE '%رقم الهاتف%';
- فحص حالة المزود المحدد. عند استخدام Twilio:
# التحقق من حالة Twilio
curl -X GET "https://verify.twilio.com/v2/Services/{ServiceSid}/VerificationCheck" \
-u "$TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN"
- فحص إعداد تيليجرام عند استخدام
method=telegram:
curl -s "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/getMe"
تأكد أن المستخدم فتح بوت شام باص وأرسل /start، وأن الواجهة ترسل telegramChatId رقمي صالح.
- فحص خدمة بوت تيليجرام في Docker:
docker compose ps telegram-bot
docker compose logs --tail=120 telegram-bot
يجب أن تحتوي البيئة على TELEGRAM_BOT_TOKEN وSUPABASE_SERVICE_ROLE_KEY. عند مشاركة المستخدم رقمه مع البوت، تُحفظ العلاقة في جدول telegram_chat_links.
- إعادة إرسال 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 غير صحيح
الإجراءات:
- التأكد من عدم انتهاء صلاحية الرمز (10 دقائق)
- طلب رمز جديد
- التأكد من إدخال الرمز بشكل صحيح
حد المحاولات
إذا تجاوز المستخدم عدد المحاولات:
-- إعادة تعيين محاولات OTP
UPDATE passengers
SET otp_attempts = 0,
last_otp_attempt = NULL
WHERE phone = '+963xxxxxxxxx';
مشاكل لوحة التحكم
نسيان كلمة المرور
- استخدام رابط "نسيت كلمة المرور"
- إعادة تعيين من قاعدة البيانات (حالة طوارئ):
-- الحصول على معرف المستخدم
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
فحص الرمز:
- نسخ JWT token
- فك التشفير في jwt.io
- التحقق من:
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';