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

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

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

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

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

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

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

כשמאתחלים את הכניסה באמצעות חשבון Google, צריך לבקש את היקף הבסיס profile. השלב הזה כלול ביצירת לחצן כניסה ל-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 option = new gapi.auth2.SigninOptionsBuilder();
option.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}));
    });