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

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

इस फ़्लो के दौरान, यूज़र इंटरफ़ेस (यूआई) उपयोगकर्ताओं को बताता है कि स्क्रिप्ट किन अनुमतियों का अनुरोध करती है. उदाहरण के लिए, कोई स्क्रिप्ट ईमेल मैसेज पढ़ने या कैलेंडर इवेंट बनाने की अनुमति मांग सकती है. स्क्रिप्ट प्रोजेक्ट में, इन अनुमतियों को 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, फ़ंक्शन कॉल के लिए कोड को स्कैन करके, ज़रूरी स्कोप का अपने-आप पता लगाती है. ज़्यादातर स्क्रिप्ट के लिए यह तरीका सही है. हालांकि, पब्लिश किए गए ऐड-ऑन, वेब ऐप्लिकेशन, Chat ऐप्लिकेशन, और 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 की सहमति वाली ज़्यादा जानकारी देने वाली स्क्रीन को सबसे पहले, Apps Script IDE के लिए लॉन्च किया गया था. यह उन उपयोगकर्ताओं के लिए थी जो सीधे तौर पर स्क्रिप्ट को लागू करते हैं. सहमति लेने वाली स्क्रीन को समय के साथ-साथ, अन्य प्लैटफ़ॉर्म पर भी रिलीज़ किया जाता है. जैसे, मैक्रो, ट्रिगर, और ऐड-ऑन. ज़्यादा जानकारी के लिए, Google Apps Script IDE में स्क्रिप्ट चलाने के लिए, OAuth की सहमति से जुड़ी ज़्यादा जानकारी लेख पढ़ें.

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

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

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

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

ScriptApp क्लास के ये तरीके, अनुमतियों की पुष्टि करते हैं और अनुमति देने का अनुरोध दिखाने वाली प्रॉम्प्ट विंडो रेंडर करते हैं:

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

उदाहरण

यहां दिए गए उदाहरण में, requireScopes() और requireAllScopes() को कॉल करने का तरीका बताया गया है. यह स्क्रिप्ट, 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() का इस्तेमाल करके, उन सुविधाओं को कैसे स्किप किया जाए जिनके लिए उपयोगकर्ताओं ने ज़रूरी स्कोप की अनुमति नहीं दी है. इससे, बाकी के एक्ज़ीक्यूशन फ़्लो को जारी रखने की अनुमति मिलती है. इसके लिए, छूटे हुए स्कोप के लिए अनुमति मांगने की ज़रूरत नहीं होती.

// 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 क्लाइंट की पुष्टि करानी होगी. इसके बाद ही, इसे वेब ऐप्लिकेशन या ऐड-ऑन के तौर पर सार्वजनिक तौर पर पब्लिश किया जा सकता है. ज़्यादा जानकारी के लिए, यहां दी गई गाइड देखें:

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

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

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

अगर हो सके, तो प्रतिबंधित स्कोप का इस्तेमाल न करें, ताकि समीक्षा की प्रोसेस को आसान बनाया जा सके. गैर-सार्वजनिक ऐप्लिकेशन के लिए, पाबंदी वाले स्कोप का इस्तेमाल बिना किसी शुल्क के किया जा सकता है.