בקשה להרשאות נוספות

כשמבקשים הרשאת משתמש לגשת לנתוני משתמשים או למשאבים אחרים, אפשר לבקש את כל ההיקפים מראש בבקשה הראשונית, או לבקש היקפים רק לפי הצורך באמצעות אישור מצטבר. באמצעות הרשאה מצטברת, האפליקציה מבקשת בהתחלה רק את היקפי ההרשאות שנדרשת להפעלת האפליקציה, ואז מבקשת היקפי הרשאות נוספים כהרשאות חדשות נדרשות, בהקשר שבו מצוין הסיבה לבקשה משתמש.

לדוגמה, נניח שהאפליקציה שלך מאפשרת למשתמשים לשמור פלייליסטים של מוזיקה ל-Google Drive. האפליקציה שלך יכולה לבקש פרטי משתמש בסיסיים בכניסה לחשבון, ובהמשך, כשהמשתמש יהיה מוכן לשמור את הפלייליסט הראשון שלו, לבקש הרשאות ב-Google Drive בלבד.

כדאי להשתמש בשיטה הזו אם לדעתכם משתמשים לא נכנסים לחשבון כי יותר מדי אנשים, או שהם מבולבלים לגבי הסיבה שבגללה מבקשים אותם להרשאות מסוימות. ההוראות הבאות מיועדות לאינטרנט, והן נגזרות הוראות להוספת לחצן כניסה בצד הלקוח: יצירת לחצן כניסה באמצעות Google 2.0. כדי לקבל מידע נוסף על הרשאה מצטברת לאינטרנט, אפשר לעבור מסמכי תיעוד של OAuth 2.0

שליחת בקשה להיקפים נוספים

בכניסה, האפליקציה מבקשת 'בסיס' היקפים, הכוללים את היקף הכניסה profile והיקפים ראשוניים אחרים שהאפליקציה מחייבת לצורך הפעלה. מאוחר יותר, כשהמשתמש ירצה לבצע פעולה שמחייבת פעולות נוספות היקפים, האפליקציה שלך מבקשת את ההיקפים הנוספים האלה והמשתמש מאשר רק את ההיקפים האלה את ההיקפים החדשים ממסך ההסכמה.

שלב 1: בקשה להיקפי גישה בסיסיים

צריך לבקש את היקף הבסיס profile כשמפעילים את הכניסה באמצעות חשבון Google. הזה השלב הזה נכלל יצירת לחצן כניסה באמצעות Google 2.0.

auth2 = gapi.auth2.init({
    client_id: 'CLIENT_ID.apps.googleusercontent.com',
    cookiepolicy: 'single_host_origin', /** Default value **/
    scope: 'profile' });                /** Base scope **/

שלב 2: מבקשים היקפים נוספים

בכל מקום שבו נדרשים היקפי גישה נוספים, מבקשים אותם על ידי יצירה של בונה אפשרויות עם ההיקפים שרוצים להוסיף, ואז קוראים ל-user.grant({scope: [OPTIONS BUILDER]}).then(successFunction, failFunction);:

const options = new gapi.auth2.SigninOptionsBuilder();
options.setScope('email https://www.googleapis.com/auth/drive');

googleUser = auth2.currentUser.get();
googleUser.grant(options).then(
    function(success){
      console.log(JSON.stringify({message: "success", value: success}));
    },
    function(fail){
      alert(JSON.stringify({message: "fail", value: fail}));
    });