طلب أذونات إضافية

عند طلب إذن المستخدم للوصول إلى بيانات المستخدم أو موارد أخرى، يمكنك طلب جميع النطاقات مقدمًا في الطلب الأولي أو طلب النطاقات حسب الحاجة فقط، باستخدام التفويض المتزايد. باستخدام التفويض المتزايد، لا يطلب تطبيقك في البداية سوى النطاقات المطلوبة لبدء تشغيل تطبيقك، ثم يطلب نطاقات إضافية عند الحاجة إلى أذونات جديدة، في سياق يحدِّد سبب الطلب إلى المستخدم.

على سبيل المثال، لنفترض أن تطبيقك يتيح للمستخدمين حفظ قوائم تشغيل الموسيقى في 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 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}));
    });