טיפול בשגיאות

שגיאות עשויות להתרחש בשכבות שונות. יכול להיות שתקבלו התראות בכל מיני דרכים, בהתאם למקום שבו אירעה השגיאה.

חסרים פרמטרים נדרשים של 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
});