عند طلب إذن من المستخدم للوصول إلى بياناته أو موارده الأخرى، يمكنك طلب جميع النطاقات مقدّمًا في الطلب الأوّلي أو طلب النطاقات عند الحاجة فقط، باستخدام المصادقة المتزايدة. باستخدام المصادقة المتزايدة، لا يطلب تطبيقك في البداية سوى النطاقات المطلوبة لبدء تطبيقك، ثم يطلب نطاقات إضافية عند الحاجة إلى أذونات جديدة، في سياق يحدّد سبب الطلب للمستخدم.
على سبيل المثال، لنفترض أنّ تطبيقك يتيح للمستخدمين حفظ قوائم الموسيقى في Google Drive. يمكن لتطبيقك طلب معلومات المستخدم الأساسية عند تسجيل الدخول، ثم طلب أذونات Google Drive فقط عندما يصبح المستخدم جاهزًا لحفظ قائمة الموسيقى الأولى.
استخدِم هذا الأسلوب إذا كنت تشك في أنّ المستخدمين لا يسجّلون الدخول لأنّ شاشة الموافقة مربكة أو مرتبكة بشأن سبب طلب أذونات معيّنة منهم. التعليمات التالية مخصَّصة للويب وهي مستمَدة من تعليمات إضافة زر تسجيل الدخول من جهة العميل: إنشاء زر لتسجيل الدخول في الإصدار 2.0 من Google. يمكنك الاطّلاع على مزيد من المعلومات عن التفويض التزايدي للويب في مستندات 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}));
});