अनुमति पाने के लिंक

उपयोगकर्ताओं को उन स्क्रिप्ट प्रोजेक्ट को अनुमति देनी होगी जो उनके डेटा को ऐक्सेस करते हैं या उनकी ओर से कार्रवाई करते हैं. जब कोई उपयोगकर्ता पहली बार ऐसी स्क्रिप्ट चलाता है जिसके लिए अनुमति लेना ज़रूरी है, तो यूज़र इंटरफ़ेस (यूआई) में अनुमति लेने की प्रोसेस शुरू करने के लिए एक प्रॉम्प्ट दिखता है.

इस प्रोसेस के दौरान, यूज़र इंटरफ़ेस (यूआई) उपयोगकर्ता को बताता है कि स्क्रिप्ट को किस काम के लिए अनुमति चाहिए. उदाहरण के लिए, किसी स्क्रिप्ट को उपयोगकर्ता के ईमेल मैसेज पढ़ने या उसके कैलेंडर में इवेंट बनाने की अनुमति चाहिए. स्क्रिप्ट प्रोजेक्ट, इन अलग-अलग अनुमतियों को OAuth स्कोप के तौर पर तय करता है.

ज़्यादातर स्क्रिप्ट के लिए, Apps Script अपने-आप पता लगा लेती है कि आपको किन स्कोप की ज़रूरत है. स्क्रिप्ट इस्तेमाल किए जाने वाले स्कोप को कभी भी देखा जा सकता है. यूआरएल स्ट्रिंग का इस्तेमाल करके, मेनिफ़ेस्ट में स्कोप साफ़ तौर पर सेट भी किए जा सकते हैं. कभी-कभी, ऐड-ऑन जैसे कुछ ऐप्लिकेशन के लिए, स्कोप को साफ़ तौर पर सेट करना ज़रूरी होता है. ऐसा इसलिए, क्योंकि पब्लिश किए गए ऐप्लिकेशन को हमेशा सबसे कम स्कोप का इस्तेमाल करना चाहिए.

अनुमति देने की प्रोसेस के दौरान, Apps Script उपयोगकर्ता को ज़रूरी स्कोप के बारे में ऐसी जानकारी देता है जिसे आसानी से समझा जा सकता है. उदाहरण के लिए, अगर आपकी स्क्रिप्ट को आपकी स्प्रेडशीट का रीड-ओनली ऐक्सेस चाहिए, तो मेनिफ़ेस्ट में https://www.googleapis.com/auth/spreadsheets.readonly स्कोप हो सकता है. अनुमति देने की प्रोसेस के दौरान, इस स्कोप वाली स्क्रिप्ट, उपयोगकर्ता से इस ऐप्लिकेशन को "आपकी Google Sheets देखने" की अनुमति देने के लिए कहती है.

कुछ स्कोप में अन्य स्कोप शामिल होते हैं. उदाहरण के लिए, जब स्कोप https://www.googleapis.com/auth/spreadsheets को अनुमति दी जाती है, तब वह स्प्रेडशीट को पढ़ने और उनमें बदलाव करने का ऐक्सेस देता है.

कुछ प्लैटफ़ॉर्म पर स्क्रिप्ट चलती हैं. जैसे, Apps Script IDE से सीधे स्क्रिप्ट चलाना. इन प्लैटफ़ॉर्म पर उपयोगकर्ताओं को, OAuth की सहमति वाली स्क्रीन दिखाई जाती है. इस स्क्रीन पर, उपयोगकर्ताओं को यह तय करने का विकल्प मिलता है कि वे किस डेटा को ऐक्सेस करने की अनुमति देना चाहते हैं. इससे लोग, एक साथ सभी अनुमतियां देने के बजाय, चुनिंदा अनुमतियां दे सकते हैं. अपनी स्क्रिप्ट को इस तरह से डिज़ाइन करना ज़रूरी है कि वह OAuth की बारीकी से तय की गई अनुमतियों को मैनेज कर सके.

स्कोप देखना

यहां दिए गए तरीके से, यह देखा जा सकता है कि आपके स्क्रिप्ट प्रोजेक्ट को फ़िलहाल किन स्कोप की ज़रूरत है:

  1. स्क्रिप्ट प्रोजेक्ट खोलें.
  2. बाईं ओर, खास जानकारी पर क्लिक करें.
  3. प्रोजेक्ट के OAuth स्कोप में जाकर, स्कोप देखें.

साफ़ तौर पर स्कोप सेट करना

Apps Script, फ़ंक्शन कॉल के लिए स्क्रिप्ट के कोड को स्कैन करके, यह अपने-आप तय करता है कि स्क्रिप्ट को किन स्कोप की ज़रूरत है. ज़्यादातर स्क्रिप्ट के लिए यह काफ़ी है और इससे आपका समय बचता है. हालाँकि, पब्लिश किए गए ऐड-ऑन, वेब ऐप्लिकेशन, Google Chat ऐप्लिकेशन, और Google Chat API को किए गए कॉल के लिए, आपको स्कोप पर ज़्यादा कंट्रोल रखना होगा.

Apps Script, कभी-कभी प्रोजेक्ट को बहुत ज़्यादा अनुमतियां अपने-आप असाइन कर देता है. इसका मतलब यह हो सकता है कि आपकी स्क्रिप्ट, उपयोगकर्ता से ज़रूरत से ज़्यादा जानकारी मांग रही है. यह एक खराब तरीका है. पब्लिश की गई स्क्रिप्ट के लिए, आपको ब्रॉड स्कोप को ज़्यादा सीमित सेट से बदलना होगा. यह सेट, स्क्रिप्ट की ज़रूरतों को पूरा करता हो और इससे ज़्यादा न हो.

स्क्रिप्ट प्रोजेक्ट के लिए इस्तेमाल किए जाने वाले स्कोप को साफ़ तौर पर सेट किया जा सकता है. इसके लिए, आपको स्क्रिप्ट प्रोजेक्ट की मेनिफ़ेस्ट फ़ाइल में बदलाव करना होगा. मेनिफ़ेस्ट फ़ील्ड oauthScopes, प्रोजेक्ट में इस्तेमाल किए गए सभी स्कोप का कलेक्शन होता है. अपने प्रोजेक्ट के स्कोप सेट करने के लिए, यह तरीका अपनाएं:

  1. स्क्रिप्ट प्रोजेक्ट खोलें.
  2. बाईं ओर, प्रोजेक्ट सेटिंग पर क्लिक करें.
  3. मेनिफ़ेस्ट फ़ाइल "appsscript.json" एडिटर में दिखाएं चेकबॉक्स को चुनें.
  4. बाईं ओर, एडिटर पर क्लिक करें.
  5. बाईं ओर, appsscript.json फ़ाइल पर क्लिक करें.
  6. oauthScopes लेबल वाला टॉप-लेवल फ़ील्ड ढूंढें. अगर यह मौजूद नहीं है, तो इसे जोड़ा जा सकता है.
  7. oauthScopes फ़ील्ड, स्ट्रिंग का एक अरे दिखाता है. आपके प्रोजेक्ट में इस्तेमाल होने वाले स्कोप सेट करने के लिए, इस ऐरे के कॉन्टेंट को उन स्कोप से बदलें जिनका आपको इस्तेमाल करना है. उदाहरण के लिए:
          {
            ...
            "oauthScopes": [
              "https://www.googleapis.com/auth/spreadsheets.readonly",
              "https://www.googleapis.com/auth/userinfo.email"
            ],
           ...
          }
  8. सबसे ऊपर, सेव करें पर क्लिक करें.

OAuth की अनुमतियों को मैनेज करना

OAuth के लिए सहमति देने वाली स्क्रीन पर, उपयोगकर्ता यह तय कर सकते हैं कि उन्हें OAuth के किन स्कोप के लिए सहमति देनी है. OAuth की ज़्यादा बेहतर अनुमतियों की मदद से, उपयोगकर्ता यह तय कर सकते हैं कि उन्हें किस स्क्रिप्ट के साथ खाते का कौनसा डेटा शेयर करना है. उदाहरण के लिए, मान लें कि आपने एक ऐसी स्क्रिप्ट डेवलप की है जो ईमेल और कैलेंडर, दोनों के स्कोप के लिए अनुमति का अनुरोध करती है. आपके उपयोगकर्ता, Google Calendar के साथ काम करने वाली सुविधाओं के लिए ही आपकी स्क्रिप्ट का इस्तेमाल करना चाहें. हालांकि, वे Gmail के लिए इसका इस्तेमाल न करना चाहें. OAuth की अनुमतियों को ज़्यादा बारीकी से कंट्रोल करने की सुविधा की मदद से, उपयोगकर्ता सिर्फ़ Calendar की अनुमति दे सकते हैं, Gmail की नहीं.

यहां दिए गए सेक्शन में, ओएयूथ की अनुमतियों को मैनेज करने के मुख्य तरीकों के बारे में बताया गया है.

ज़रूरी स्कोप के लिए अनुमति पाने की सुविधा अपने-आप चालू होना

अगर किसी एक्ज़ीक्यूशन फ़्लो को काम करने के लिए स्कोप की अनुमति चाहिए, तो उपयोगकर्ताओं को उन अनुमतियों को देने के लिए कहा जा सकता है. इसके बाद ही, वे इसका इस्तेमाल कर पाएंगे. आपकी स्क्रिप्ट यह देख सकती है कि उपयोगकर्ता ने पहले ही अनुमति दे दी है या नहीं. अगर अनुमति नहीं दी गई है, तो स्क्रिप्ट अपने-आप अनुमति का अनुरोध कर सकती है.

ScriptApp क्लास के ये तरीके, ज़रूरी स्कोप के लिए अनुमति की पुष्टि करने की सुविधा देते हैं. साथ ही, ये छूटी हुई अनुमतियों का अनुरोध करने के लिए, अनुमति देने का अनुरोध करने वाला प्रॉम्प्ट अपने-आप रेंडर करते हैं:

  • requireScopes(authMode, oAuthScopes): इस तरीके का इस्तेमाल उन एक्ज़ीक्यूशन फ़्लो के लिए करें जो एक या उससे ज़्यादा स्कोप पर निर्भर करते हैं, लेकिन आपकी स्क्रिप्ट के इस्तेमाल किए गए सभी स्कोप पर नहीं.
  • requireAllScopes(authMode): इस तरीके का इस्तेमाल तब करें, जब स्क्रिप्ट में इस्तेमाल किए गए सभी स्कोप पर कोई एक्ज़ीक्यूशन फ़्लो निर्भर करता हो.

उदाहरण

यहां दिए गए उदाहरण में, requireScopes(authMode, oAuthScopes) और requireAllScopes(authMode) तरीकों को कॉल करने का तरीका बताया गया है. यह स्क्रिप्ट, Gmail, Sheets, और Calendar के लिए स्कोप का इस्तेमाल करती है. sendEmail() फ़ंक्शन के लिए, सिर्फ़ Gmail और Sheets के स्कोप की ज़रूरत होती है. वहीं, createEventSendEmail() फ़ंक्शन के लिए, स्क्रिप्ट में इस्तेमाल किए गए सभी स्कोप की ज़रूरत होती है.

// This function requires the Gmail and Sheets scopes.
function sendEmail() {
  // Validates that the user has granted permission for the Gmail and Sheets scopes.
  // If not, the execution ends and prompts the user for authorization.
  ScriptApp.requireScopes(ScriptApp.AuthMode.FULL, [
    'https://mail.google.com/',
    'https://www.googleapis.com/auth/spreadsheets'
  ]);

  // Sends an email.
  GmailApp.sendEmail("dana@example.com", "Subject", "Body");
  Logger.log("Email sent successfully!");

  // Opens a spreadsheet and sheet to track the sent email.
  const ss = SpreadsheetApp.openById("abc1234567");
  const sheet = ss.getSheetByName("Email Tracker")

  // Gets the last row of the sheet.
  const lastRow = sheet.getLastRow();

  // Adds "Sent" to column E of the last row of the spreadsheet.
  sheet.getRange(lastRow, 5).setValue("Sent");
  Logger.log("Sheet updated successfully!");
}

// This function requires all scopes used by the script (Gmail,
// Calendar, and Sheets).
function createEventSendEmail() {
  // Validates that the user has granted permission for all scopes used by the
  // script. If not, the execution ends and prompts the user for authorization.
  ScriptApp.requireAllScopes(ScriptApp.AuthMode.FULL);

  // Creates an event.
  CalendarApp.getDefaultCalendar().createEvent(
    "Meeting",
    new Date("November 28, 2024 10:00:00"),
    new Date("November 28, 2024 11:00:00")
  );
  Logger.log("Calendar event created successfully!");

  // Sends an email.
  GmailApp.sendEmail("dana@example.com", "Subject 2", "Body 2");
  Logger.log("Email sent successfully!");

  // Opens a spreadsheet and sheet to track the created meeting and sent email.
  const ss = SpreadsheetApp.openById("abc1234567");
  const sheet = ss.getSheetByName("Email and Meeting Tracker")
  // Gets the last row
  const lastRow = sheet.getLastRow();

  // Adds "Sent" to column E of the last row
  sheet.getRange(lastRow, 5).setValue("Sent");
  // Adds "Meeting created" to column F of the last row
  sheet.getRange(lastRow, 6).setValue("Meeting created");
  Logger.log("Sheet updated successfully!");
}

स्कोप मौजूद न होने पर, कस्टम अनुभव बनाना

आपकी स्क्रिप्ट चलाने वाले उपयोगकर्ता की अनुमति से जुड़ी जानकारी मिल सकती है. साथ ही, अनुमति की स्थिति के आधार पर, उपयोगकर्ता के लिए कस्टम अनुभव डिज़ाइन किया जा सकता है. उदाहरण के लिए, स्क्रिप्ट की उन सुविधाओं को बंद किया जा सकता है जिनके लिए ऐसी अनुमतियों की ज़रूरत होती है जो उपयोगकर्ता ने नहीं दी हैं. इसके अलावा, कस्टम डायलॉग दिखाकर, उन अनुमतियों के बारे में बताया जा सकता है जो उपयोगकर्ता ने नहीं दी हैं. नीचे दिए गए तरीकों से, उपयोगकर्ता की अनुमति से जुड़ी जानकारी वाला ऑब्जेक्ट मिलता है. इसमें यह जानकारी शामिल होती है कि उपयोगकर्ता ने किन स्कोप के लिए अनुमति दी है. साथ ही, इसमें एक यूआरएल भी होता है. इस यूआरएल का इस्तेमाल करके, उन स्कोप के लिए अनुरोध किया जा सकता है जिनके लिए अनुमति नहीं दी गई है:

  • getAuthorizationInfo(authMode, oAuthScopes): इस तरीके का इस्तेमाल करके, कुछ स्कोप के लिए अनुमति की स्थिति देखें.
  • getAuthorizationInfo(authMode): इस तरीके का इस्तेमाल करके, अपनी स्क्रिप्ट में इस्तेमाल किए गए सभी स्कोप के लिए अनुमति की स्थिति देखें.

अनुमति देने से जुड़ी जानकारी वाले ऑब्जेक्ट से, अनुमति की जानकारी पाने के लिए AuthorizationInfo क्लास के तरीकों का इस्तेमाल करें. जैसे, किन स्कोप को अनुमति दी गई है इसकी सूची और जिन अनुमतियों का अनुरोध नहीं किया गया है उनके लिए यूआरएल.

उदाहरण

यहां दिए गए उदाहरण में, getAuthorizationInfo(authMode, oAuthScopes) तरीके को कॉल करने का तरीका बताया गया है. इससे, किसी ऐसे एक्ज़ीक्यूशन फ़्लो में कुछ सुविधाओं को स्किप किया जा सकता है जहां ज़रूरी स्कोप नहीं दिए गए हैं. इससे, स्क्रिप्ट को चलाने की प्रोसेस जारी रहती है. साथ ही, स्क्रिप्ट को चलाने के लिए ज़रूरी स्कोप की अनुमति मांगने की ज़रूरत नहीं पड़ती.

// This function uses the Gmail scope and skips the email
// capabilities if the scope for Gmail hasn't been granted.
function myFunction() {
  const authInfo = ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL, ['https://mail.google.com/']);
  if (authInfo.getAuthorizationStatus() === ScriptApp.AuthorizationStatus.NOT_REQUIRED) {
    GmailApp.sendEmail("dana@example.com", "Subject", "Body");
    Logger.log("Email sent successfully!");
  } else {
    const scopesGranted = ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL).getAuthorizedScopes();
    console.warn(`Authorized scopes: ${scopesGranted} not enough to send mail, skipping.`);
  }
  // Continue the rest of the execution flow...
}

पक्का करें कि ट्रिगर को लागू करने की अनुमतियां हों

ट्रिगर से जुड़े फ़ंक्शन, कुछ इवेंट पर अपने-आप चालू हो सकते हैं. ऐसे में, हो सकता है कि उपयोगकर्ता ज़्यादा अनुमतियां देने के लिए मौजूद न हो. हमारा सुझाव है कि ट्रिगर इंस्टॉल करने से पहले, requireScopes(authMode, oAuthScopes) का इस्तेमाल करें. इससे उपयोगकर्ता को उन अनुमतियों के बारे में सूचना मिलती है जो ज़रूरी हैं. साथ ही, इनके बिना ट्रिगर इंस्टॉल नहीं किया जा सकता.

उदाहरण

// This function requires scope Sheets.
function trackFormSubmissions(e){
  // Opens a spreadsheet to track the sent email.
  const ss = SpreadsheetApp.openById("abc1234567");
  const sheet = ss.getSheetByName("Submission Tracker")

  // Gets the last row of the sheet.
  const lastRow = sheet.getLastRow();

  // Adds email address of user that submitted the form
  // to column E of the last row of the spreadsheet.
  sheet.getRange(lastRow, 5).setValue(e.name);
  Logger.log("Sheet updated successfully!");
}


function installTrigger(){
  // Validates that the user has granted permissions for trigger
  // installation and execution. If not, trigger doesn't get
  // installed and prompts the user for authorization.
  ScriptApp.requireScopes(ScriptApp.AuthMode.FULL, [
    'https://www.googleapis.com/auth/script.scriptapp',
    'https://www.googleapis.com/auth/spreadsheets',
    'https://www.googleapis.com/auth/forms.currentonly'
  ]);
  ScriptApp.newTrigger('trackFormSubmission')
    .forForm(FormApp.getActiveForm())
    .onFormSubmit()
    .create();
}

OAuth की पुष्टि

कुछ OAuth स्कोप संवेदनशील होते हैं, क्योंकि इनसे Google उपयोगकर्ता डेटा का ऐक्सेस मिलता है. अगर आपके स्क्रिप्ट प्रोजेक्ट में ऐसे स्कोप का इस्तेमाल किया जाता है जो उपयोगकर्ता के डेटा को ऐक्सेस करने की अनुमति देते हैं, तो प्रोजेक्ट को OAuth क्लाइंट की पुष्टि करानी होगी. इसके बाद ही, इसे वेब ऐप्लिकेशन या ऐड-ऑन के तौर पर सार्वजनिक तौर पर पब्लिश किया जा सकेगा. ज़्यादा जानकारी के लिए, ये गाइड देखें:

पाबंदी वाले स्कोप

संवेदनशील स्कोप के अलावा, कुछ स्कोप को पाबंदी वाला स्कोप माना जाता है. इन पर अतिरिक्त नियम लागू होते हैं, ताकि उपयोगकर्ता के डेटा को सुरक्षित रखा जा सके. अगर आपको कोई ऐसा वेब ऐप्लिकेशन या ऐड-ऑन पब्लिश करना है जो एक या उससे ज़्यादा प्रतिबंधित स्कोप का इस्तेमाल करता है, तो ऐप्लिकेशन को पब्लिश करने से पहले, बताई गई सभी पाबंदियों का पालन करना होगा.

पब्लिश करने से पहले, पाबंदी वाले स्कोप की पूरी सूची देखें. अगर आपका ऐप्लिकेशन इनमें से किसी भी एपीआई का इस्तेमाल करता है, तो आपको पब्लिश करने से पहले, एपीआई के कुछ स्कोप के लिए तय की गई अतिरिक्त ज़रूरी शर्तों का पालन करना होगा.