التعامل مع الأخطاء

قد تحدث أخطاء في طبقات مختلفة. قد يتم إعلامك بطرق مختلفة، وذلك تبعًا لمكان حدوث الخطأ.

مَعلمات OAuth المطلوبة

إذا نسيت ضبط مَعلمات OAuth المطلوبة، مثل client_id أو scope، ستظهر لك رسالة خطأ في وحدة تحكّم JavaScript في المتصفّح.

أخطاء وحدة تحكّم JavaScript

إصلاح أخطاء إعدادات OAuth

قد تكون التغييرات في وحدة تحكّم Google APIs مطلوبة لحلّ بعض الأخطاء.

قيم مَعلمات OAuth غير الصالحة

في حال ضبط قيم غير صالحة لمَعلمات OAuth، مثل قيمة معرّف العميل أو معرّفات النطاق أو قيم نوع الاستجابة غير الصالحة، ستظهر لك صفحة خطأ OAuth.

أخطاء OAuth

ردود أخطاء OAuth

قد يعرض بروتوكول OAuth استجابة خطأ، وفي هذه الحالة سيتم بدء دالة callback باستخدام استجابة الخطأ كمَعلمة. في ما يلي مثال على ردّ خطأ OAuth.

  {
    "error":"access_denied"
  }

تشمل بعض الأمثلة:

  1. يرفض المستخدم طلب OAuth.
  2. بالنسبة إلى طلب OAuth الذي يتضمّن المَعلمة prompt=none، لم يتم مصادقة المستخدم مسبقًا ولم يسبق له ضبط الموافقة على النطاقات المطلوبة.

يوضّح هذا المثال كيفية التعامل مع استجابات OAuth للنجاح والخطأ:

function myCallback(response) {
  if (response.error) {
    // Handle error response
    ... ...
  } else if (response.code) {
    // Handle success code response
    ... ...
  }
}

الأخطاء غير المتعلّقة بـ OAuth

لا يحدِّد بروتوكول OAuth السلوكيات في الحالات التالية:

  1. تعذّر فتح النافذة المنبثقة.
  2. يتم إغلاق النافذة المنبثقة قبل عرض ردّ بروتوكول OAuth.

ترصد هذه المكتبة هذه الأخطاء وتشغّل error_callback إذا تم ضبطها. احرص على التحقّق من نوع الخطأ. بخلاف ذلك، قد يتأثّر منطق الرمز البرمجي عندما تتيح هذه المكتبة أنواع أخطاء جديدة لاحقًا.

function myErrorCallback(err) {
  if (err.type == 'popup_failed_to_open') {
    // The popup window is failed to open
    ... ...
  } else if (err.type == 'popup_closed') {
    // The popup window is closed before an OAuth response is returned
    ... ...
  }
}

const client = google.accounts.oauth2.initCodeClient({
  client_id: 'YOUR_GOOGLE_CLIENT_ID',
  scope: 'https://www.googleapis.com/auth/calendar.readonly',
  ux_mode: 'popup',
  callback: myCallback,
  error_callback: myErrorCallback
});