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