خطاها ممکن است در لایه های مختلف رخ دهد. بسته به محل وقوع خطا، ممکن است به طرق مختلف مطلع شوید.
پارامترهای OAuth مورد نیاز وجود ندارد
اگر فراموش کردید که پارامترهای OAuth مورد نیاز، مانند client_id یا scope را تنظیم کنید، پیام خطایی مانند زیر را در کنسول جاوا اسکریپت مرورگر خود مشاهده خواهید کرد.
رفع خطاهای پیکربندی OAuth
ممکن است برای رفع برخی از خطاها تغییراتی در کنسول Google APIs لازم باشد.
- شناسه مشتری ایجاد می کند اگر هنوز این کار را نکرده است.
- برای UX بازشو، همه دامنههایی را که ممکن است جریان فعلی را راهاندازی کنند، به
Authorized JavaScript origins
اضافه کنید. - برای تغییر مسیر UX، همه نشانیهای اینترنتی را که ممکن است پاسخهای مجوز دریافت کنند، به
Authorized redirect URIs
اضافه کنید. - صفحه رضایت OAuth خود را به درستی پیکربندی کنید .
- در صورت نیاز برنامه خود را برای تأیید ارسال کنید .
- ممکن است لازم باشد اقدامات بیشتری برای پیروی از خطمشیهای Google OAuth 2.0 انجام دهید.
مقادیر پارامتر 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
});