معالجة الأخطاء

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

عدم توفُّر مَعلمات 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
});