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

إصلاح أخطاء إعدادات OAuth
قد تكون التغييرات في وحدة تحكّم Google APIs مطلوبة لحلّ بعض الأخطاء.
- إنشاء معرِّف عميل إذا لم يكن متوفّرًا بعد
- بالنسبة إلى تجربة المستخدم في النوافذ المنبثقة، أضِف جميع النطاقات التي قد تؤدي إلى بدء المسار الحالي إلى
Authorized JavaScript origins
. - بالنسبة إلى تجربة إعادة التوجيه للمستخدم، أضِف جميع عناوين URL التي قد تتلقّى ردودًا بشأن التفويض إلى
Authorized redirect URIs
. - إعداد شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth بشكل صحيح
- أرسِل تطبيقك للتحقّق منه إذا لزم الأمر.
- قد تحتاج إلى اتّخاذ خطوات إضافية للامتثال لسماح OAuth 2.0 لسياسات Google.
قيم مَعلمات OAuth غير الصالحة
في حال ضبط قيم غير صالحة لمَعلمات OAuth، مثل قيمة معرّف العميل أو معرّفات النطاق أو قيم نوع الاستجابة غير الصالحة، ستظهر لك صفحة خطأ OAuth.

ردود أخطاء OAuth
قد يعرض بروتوكول OAuth استجابة خطأ، وفي هذه الحالة سيتم بدء دالة callback
باستخدام استجابة الخطأ كمَعلمة. في ما يلي مثال على ردّ خطأ OAuth.
{ "error":"access_denied" }
تشمل بعض الأمثلة:
- يرفض المستخدم طلب OAuth.
- بالنسبة إلى طلب OAuth الذي يتضمّن المَعلمة
prompt=none
، لم يتم مصادقة المستخدم مسبقًا ولم يسبق له ضبط الموافقة على النطاقات المطلوبة.
يوضّح هذا المثال كيفية التعامل مع استجابات OAuth للنجاح والخطأ:
function myCallback(response) {
if (response.error) {
// Handle error response
... ...
} else if (response.code) {
// Handle success code response
... ...
}
}
الأخطاء غير المتعلّقة بـ OAuth
لا يحدِّد بروتوكول OAuth السلوكيات في الحالات التالية:
- تعذّر فتح النافذة المنبثقة.
- يتم إغلاق النافذة المنبثقة قبل عرض ردّ بروتوكول 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
});