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