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

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

عدم توفّر مَعلمات 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 if set. يُرجى التأكّد من نوع الخطأ كما هو موضّح أدناه. بخلاف ذلك، قد يتأثّر منطق الرمز البرمجي عندما تتيح هذه المكتبة أنواع أخطاء جديدة لاحقًا.

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
});