قد تحدث أخطاء في طبقات مختلفة. قد يتم إشعارك بطرق مختلفة تعتمد على مكان حدوث الخطأ.
عدم توفُّر مَعلمات 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
});