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

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

לדוגמה, נניח שהאפליקציה מאפשרת למשתמשים לשמור פלייליסטים של מוזיקה ב-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}));
    });