उपयोगकर्ताओं को उन स्क्रिप्ट प्रोजेक्ट को अनुमति देनी होगी जो उनके डेटा को ऐक्सेस करते हैं या उनकी ओर से कार्रवाई करते हैं. जब कोई उपयोगकर्ता पहली बार ऐसी स्क्रिप्ट चलाता है जिसके लिए अनुमति की ज़रूरत होती है, तो यूज़र इंटरफ़ेस (यूआई) अनुमति फ़्लो शुरू करने के लिए एक प्रॉम्प्ट दिखाता है.
इस फ़्लो के दौरान, यूज़र इंटरफ़ेस (यूआई) उपयोगकर्ता को बताता है कि स्क्रिप्ट को क्या करने की अनुमति चाहिए. उदाहरण के लिए, हो सकता है कि स्क्रिप्ट को उपयोगकर्ता के ईमेल मैसेज पढ़ने या उसके कैलेंडर में इवेंट बनाने की अनुमति चाहिए. स्क्रिप्ट प्रोजेक्ट, इन अलग-अलग अनुमतियों को OAuth स्कोप के तौर पर तय करता है.
ज़्यादातर स्क्रिप्ट के लिए, Apps Script अपने-आप यह पता लगा लेता है कि आपके लिए कौनसे स्कोप ज़रूरी हैं. किसी भी समय, स्क्रिप्ट के इस्तेमाल किए गए स्कोप देखे जा सकते हैं. यूआरएल स्ट्रिंग का इस्तेमाल करके, अपने manifest में स्कोप साफ़ तौर पर सेट भी किए जा सकते हैं. ऐड-ऑन जैसे कुछ ऐप्लिकेशन के लिए, स्कोप को साफ़ तौर पर सेट करना ज़रूरी होता है. ऐसा इसलिए, क्योंकि पब्लिश किए गए ऐप्लिकेशन को हमेशा सबसे छोटे स्कोप का इस्तेमाल करना चाहिए.
अनुमति देने के फ़्लो के दौरान, Apps Script उपयोगकर्ता को ज़रूरी स्कोप के बारे में ऐसी जानकारी दिखाता है जिसे पढ़ा जा सकता है. उदाहरण के लिए, अगर आपकी स्क्रिप्ट को आपकी स्प्रेडशीट का रीड-ओनली ऐक्सेस चाहिए, तो मेनिफ़ेस्ट में स्कोप https://www.googleapis.com/auth/spreadsheets.readonly
हो सकता है. अनुमति देने के फ़्लो के दौरान, इस दायरे वाली स्क्रिप्ट, उपयोगकर्ता से इस ऐप्लिकेशन को "आपके Google स्प्रेडशीट देखने" की अनुमति देने के लिए कहती है.
कुछ स्कोप में दूसरे स्कोप शामिल होते हैं. उदाहरण के लिए, अनुमति मिलने पर स्कोप https://www.googleapis.com/auth/spreadsheets
, स्प्रेडशीट को पढ़ने और उनमें बदलाव करने का ऐक्सेस देता है.
जिन प्लैटफ़ॉर्म पर स्क्रिप्ट चलती हैं, जैसे कि Apps Script IDE से सीधे स्क्रिप्ट चलाना, वहां उपयोगकर्ताओं को OAuth की सहमति से जुड़ी ज़्यादा जानकारी वाली स्क्रीन दिखती है. इससे उपयोगकर्ता, एक साथ सभी अनुमतियां देने के बजाय, कुछ चुनिंदा अनुमतियां दे सकते हैं. OAuth की बारीकी से तय की गई अनुमतियों को मैनेज करने के लिए, अपनी स्क्रिप्ट को डिज़ाइन करना ज़रूरी है.
स्कोप देखना
अपने स्क्रिप्ट प्रोजेक्ट के लिए ज़रूरी स्कोप देखने के लिए, ये काम करें:
- स्क्रिप्ट प्रोजेक्ट खोलें.
- बाईं ओर, खास जानकारी पर क्लिक करें.
- प्रोजेक्ट के OAuth दायरे में जाकर, दायरे देखें.
साफ़ तौर पर बताने वाले स्कोप सेट करना
Apps Script, स्क्रिप्ट के कोड को स्कैन करके यह अपने-आप तय करता है कि स्क्रिप्ट को कौनसे स्कोप की ज़रूरत है. ऐसा, उन फ़ंक्शन कॉल के लिए किया जाता है जिनमें स्कोप की ज़रूरत होती है. ज़्यादातर स्क्रिप्ट के लिए, यह तरीका काफ़ी है और इससे आपका समय भी बचता है. हालांकि, पब्लिश किए गए ऐड-ऑन, वेब ऐप्लिकेशन, Google Chat ऐप्लिकेशन, और Google Chat API के कॉल के लिए, आपको स्कोप को सीधे तौर पर कंट्रोल करना होगा.
Apps Script कभी-कभी प्रोजेक्ट को अपने-आप बहुत ज़्यादा अनुमतियां देने वाले स्कोप असाइन कर देता है. इसका मतलब यह हो सकता है कि आपकी स्क्रिप्ट, उपयोगकर्ता से ज़रूरत से ज़्यादा जानकारी मांगती है. यह एक गलत तरीका है. पब्लिश की गई स्क्रिप्ट के लिए, आपको ब्रॉड स्कोप को ज़्यादा सीमित सेट से बदलना होगा. यह सेट, स्क्रिप्ट की ज़रूरतों को पूरा करता है और उससे ज़्यादा नहीं.
स्क्रिप्ट प्रोजेक्ट के इस्तेमाल किए जाने वाले स्कोप को साफ़ तौर पर सेट किया जा सकता है. इसके लिए, आपको स्क्रिप्ट की manifest फ़ाइल में बदलाव करना होगा. मेनिफ़ेस्ट फ़ील्ड
oauthScopes
, प्रोजेक्ट के इस्तेमाल किए गए सभी स्कोप का कलेक्शन होता है. अपने प्रोजेक्ट के दायरे सेट करने के लिए, यह तरीका अपनाएं:
- स्क्रिप्ट प्रोजेक्ट खोलें.
- बाईं ओर, प्रोजेक्ट सेटिंग पर क्लिक करें.
- एडिटर में "appsscript.json" मेनिफ़ेस्ट फ़ाइल दिखाएं चेकबॉक्स को चुनें.
- बाईं ओर, एडिटर पर क्लिक करें.
- बाईं ओर,
appsscript.json
फ़ाइल पर क्लिक करें. oauthScopes
लेबल वाले टॉप लेवल फ़ील्ड का पता लगाएं. अगर यह मौजूद नहीं है, तो इसे जोड़ा जा सकता है.oauthScopes
फ़ील्ड, स्ट्रिंग का अरे तय करता है. अपने प्रोजेक्ट के लिए इस्तेमाल किए जाने वाले स्कोप सेट करने के लिए, इस कलेक्शन के कॉन्टेंट को उन स्कोप से बदलें जिनका आपको इस्तेमाल करना है. उदाहरण के लिए:{ ... "oauthScopes": [ "https://www.googleapis.com/auth/spreadsheets.readonly", "https://www.googleapis.com/auth/userinfo.email" ], ... }
- सबसे ऊपर, सेव करें पर क्लिक करें.
OAuth की ज़्यादा जानकारी वाली अनुमतियां मैनेज करना
OAuth की सहमति वाली ज़्यादा जानकारी वाली स्क्रीन की मदद से, उपयोगकर्ता यह तय कर सकते हैं कि उन्हें OAuth के किन अलग-अलग दायरों को अनुमति देनी है. OAuth की ज़्यादा बेहतर अनुमतियों की मदद से, उपयोगकर्ताओं को यह कंट्रोल करने की सुविधा मिलती है कि वे हर स्क्रिप्ट के साथ खाते का कौनसा डेटा शेयर करना चाहते हैं. उदाहरण के लिए, मान लें कि आपने एक स्क्रिप्ट बनाई है, जो ईमेल और कैलेंडर, दोनों के स्कोप के लिए अनुमति का अनुरोध करती है. हो सकता है कि आपके उपयोगकर्ता, सिर्फ़ Google Calendar के साथ काम करने की सुविधाओं के लिए आपकी स्क्रिप्ट का इस्तेमाल करना चाहें, न कि Gmail के साथ. OAuth की ज़्यादा जानकारी वाली अनुमतियों की मदद से, उपयोगकर्ता सिर्फ़ Calendar को अनुमति दे सकते हैं, न कि Gmail को.
यहां दिए गए सेक्शन में, OAuth की बारीकी से दी गई अनुमतियों को मैनेज करने के मुख्य तरीकों के बारे में बताया गया है.
ज़रूरी स्कोप के लिए, अनुमति अपने-आप मांगना
अगर किसी एक्सीक्यूशन फ़्लो को काम करने के लिए स्कोप की अनुमति चाहिए, तो उपयोगकर्ताओं को इसका इस्तेमाल करने से पहले, उन अनुमतियों को देने की ज़रूरत पड़ सकती है. आपकी स्क्रिप्ट यह देख सकती है कि उपयोगकर्ता ने पहले ही अनुमति दी है या नहीं. अगर नहीं दी है, तो स्क्रिप्ट अपने-आप अनुमति मांग सकती है.
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...
}
OAuth की मदद से पुष्टि करना
OAuth के कुछ दायरे संवेदनशील होते हैं, क्योंकि इनसे Google उपयोगकर्ता के डेटा को ऐक्सेस करने की अनुमति मिलती है. अगर आपके स्क्रिप्ट प्रोजेक्ट में ऐसे स्कोप का इस्तेमाल किया जाता है जिनसे उपयोगकर्ता के डेटा को ऐक्सेस किया जा सकता है, तो उसे वेब ऐप्लिकेशन या ऐड-ऑन के तौर पर सार्वजनिक तौर पर पब्लिश करने से पहले, OAuth क्लाइंट की पुष्टि करनी होगी. ज़्यादा जानकारी के लिए, ये गाइड देखें:
- Apps Script के लिए OAuth क्लाइंट की पुष्टि करना
- ऐसे ऐप्लिकेशन जिनकी पुष्टि नहीं की गई है
- OAuth की पुष्टि से जुड़े अक्सर पूछे जाने वाले सवाल
- Google API सेवा: उपयोगकर्ता के डेटा की नीति
पाबंदी वाले स्कोप
संवेदनशील स्कोप के अलावा, कुछ स्कोप को प्रतिबंधित के तौर पर बांटा जाता है. साथ ही, इन पर ऐसे अन्य नियम लागू होते हैं जिनसे उपयोगकर्ता के डेटा को सुरक्षित रखने में मदद मिलती है. अगर आपको ऐसा वेब ऐप्लिकेशन या ऐड-ऑन पब्लिश करना है जो पाबंदी वाले एक या उससे ज़्यादा स्कोप का इस्तेमाल करता है, तो पब्लिश करने से पहले ऐप्लिकेशन को बताई गई सभी पाबंदियों का पालन करना होगा.
पब्लिश करने से पहले, पाबंदी वाले दायरों की पूरी सूची देखें. अगर आपका ऐप्लिकेशन इनमें से किसी का इस्तेमाल करता है, तो आपको पब्लिश करने से पहले, खास एपीआई स्कोप के लिए ज़रूरी शर्तों का पालन करना होगा.