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