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