ব্যবহারকারীদের অবশ্যই এমন স্ক্রিপ্ট প্রকল্পগুলিকে অনুমোদন করতে হবে যা তাদের ডেটা অ্যাক্সেস করে বা তাদের পক্ষে কাজ করে। যখন কোনও ব্যবহারকারী এমন একটি স্ক্রিপ্ট চালায় যার জন্য প্রথমবারের মতো অনুমোদনের প্রয়োজন হয়, তখন UI অনুমোদন প্রবাহ শুরু করার জন্য একটি প্রম্পট উপস্থাপন করে।
এই প্রবাহের সময়, UI ব্যবহারকারীকে বলে যে স্ক্রিপ্টটি কী করার অনুমতি চায়। উদাহরণস্বরূপ, একটি স্ক্রিপ্ট ব্যবহারকারীর ইমেল বার্তা পড়ার জন্য বা তাদের ক্যালেন্ডারে ইভেন্ট তৈরি করার জন্য অনুমতি চাইতে পারে। স্ক্রিপ্ট প্রকল্প এই পৃথক অনুমতিগুলিকে OAuth স্কোপ হিসাবে সংজ্ঞায়িত করে।
বেশিরভাগ স্ক্রিপ্টের ক্ষেত্রে, অ্যাপস স্ক্রিপ্ট স্বয়ংক্রিয়ভাবে আপনার জন্য কোন স্কোপগুলি প্রয়োজন তা সনাক্ত করে; আপনি যেকোনো সময় একটি স্ক্রিপ্ট যে স্কোপগুলি ব্যবহার করে তা দেখতে পারেন। আপনি URL স্ট্রিং ব্যবহার করে আপনার ম্যানিফেস্টে স্পষ্টভাবে স্কোপগুলি সেট করতে পারেন। অ্যাড-অনগুলির মতো নির্দিষ্ট অ্যাপ্লিকেশনের জন্য কখনও কখনও স্পষ্টভাবে স্কোপগুলি সেট করা প্রয়োজন, কারণ প্রকাশিত অ্যাপ্লিকেশনগুলিতে সর্বদা সম্ভাব্য সবচেয়ে সংকীর্ণ স্কোপ ব্যবহার করা উচিত।
অনুমোদন প্রবাহের সময়, অ্যাপস স্ক্রিপ্ট ব্যবহারকারীর কাছে প্রয়োজনীয় স্কোপের মানুষের পঠনযোগ্য বর্ণনা উপস্থাপন করে। উদাহরণস্বরূপ, যদি আপনার স্ক্রিপ্টের আপনার স্প্রেডশিটগুলিতে কেবল পঠনযোগ্য অ্যাক্সেসের প্রয়োজন হয়, তাহলে ম্যানিফেস্টে https://www.googleapis.com/auth/spreadsheets.readonly স্কোপ থাকতে পারে। অনুমোদন প্রবাহের সময়, এই স্কোপের একটি স্ক্রিপ্ট ব্যবহারকারীকে এই অ্যাপ্লিকেশনটিকে "আপনার Google স্প্রেডশিটগুলি দেখুন" করার অনুমতি দিতে বলে।
কিছু স্কোপ অন্যদের অন্তর্ভুক্ত করে। উদাহরণস্বরূপ, যখন অনুমোদিত হয় তখন https://www.googleapis.com/auth/spreadsheets স্প্রেডশিটগুলিতে পড়ার এবং লেখার অ্যাক্সেস দেয়।
কিছু সারফেসের ক্ষেত্রে যেখানে স্ক্রিপ্ট চলে, যেমন Apps Script IDE থেকে সরাসরি স্ক্রিপ্ট চালানো, ব্যবহারকারীদের OAuth সম্মতি স্ক্রিন দেখানো হয়। এটি ব্যবহারকারীদের একসাথে সমস্ত অনুমতি দেওয়ার পরিবর্তে নির্দিষ্ট অনুমতিগুলি নির্বাচন করতে দেয়। OAuth অনুমতিগুলি পরিচালনা করার জন্য আপনার স্ক্রিপ্টটি ডিজাইন করা গুরুত্বপূর্ণ।
স্কোপ দেখুন
আপনার স্ক্রিপ্ট প্রকল্পের বর্তমানে প্রয়োজনীয় স্কোপগুলি আপনি নিম্নলিখিতগুলি করে দেখতে পারেন:
- স্ক্রিপ্ট প্রজেক্টটি খুলুন।
- বাম দিকে, ওভারভিউ ক্লিক করুন।
- Project OAuth Scopes এর অধীনে স্কোপগুলি দেখুন।
স্পষ্ট সুযোগ সেট করুন
অ্যাপস স্ক্রিপ্ট স্বয়ংক্রিয়ভাবে নির্ধারণ করে যে কোন স্ক্রিপ্টের কোন স্কোপের প্রয়োজন, এর কোড স্ক্যান করে, যে ফাংশন কলগুলির জন্য এটি প্রয়োজন। বেশিরভাগ স্ক্রিপ্টের জন্য এটি যথেষ্ট এবং আপনার সময় সাশ্রয় করে, তবে প্রকাশিত অ্যাড-অন, ওয়েব অ্যাপ, গুগল চ্যাট অ্যাপ এবং গুগল চ্যাট এপিআই-তে কলের জন্য আপনাকে স্কোপের উপর আরও সরাসরি নিয়ন্ত্রণ প্রয়োগ করতে হবে।
অ্যাপস স্ক্রিপ্ট কখনও কখনও স্বয়ংক্রিয়ভাবে প্রকল্পগুলিকে খুব অনুমতিমূলক স্কোপ বরাদ্দ করে। এর অর্থ হতে পারে আপনার স্ক্রিপ্ট ব্যবহারকারীর কাছ থেকে তার প্রয়োজনের চেয়ে বেশি কিছু চাইবে, যা খারাপ অভ্যাস। প্রকাশিত স্ক্রিপ্টগুলির জন্য, আপনাকে ব্রড স্কোপগুলিকে আরও সীমিত সেট দিয়ে প্রতিস্থাপন করতে হবে যা স্ক্রিপ্টের চাহিদা পূরণ করে এবং এর বেশি নয়।
আপনার স্ক্রিপ্ট প্রজেক্টের ম্যানিফেস্ট ফাইল সম্পাদনা করে আপনি স্পষ্টভাবে স্কোপগুলি সেট করতে পারেন। ম্যানিফেস্ট ফিল্ড oauthScopes হল প্রজেক্ট দ্বারা ব্যবহৃত সমস্ত স্কোপের একটি অ্যারে। আপনার প্রজেক্টের স্কোপগুলি সেট করতে, নিম্নলিখিতগুলি করুন:
- স্ক্রিপ্ট প্রজেক্টটি খুলুন।
- বাম দিকে, Project Settings ক্লিক করুন।
- এডিটর চেকবক্সে "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 ক্যালেন্ডারের সাথে তার ক্ষমতার জন্য ব্যবহার করতে চাইতে পারেন, কিন্তু Gmail এর জন্য নয়। গ্রানুলার OAuth অনুমতির মাধ্যমে, ব্যবহারকারীরা কেবল ক্যালেন্ডারের অনুমতি দিতে পারেন, কিন্তু 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!");
}
অনুপস্থিত স্কোপের জন্য একটি কাস্টম অভিজ্ঞতা তৈরি করুন
আপনি আপনার স্ক্রিপ্টটি চালাচ্ছেন এমন ব্যবহারকারীর অনুমতির বিবরণ পেতে পারেন এবং তাদের অনুমতির স্থিতির উপর ভিত্তি করে একটি কাস্টম অভিজ্ঞতা ডিজাইন করতে পারেন। উদাহরণস্বরূপ, আপনি আপনার স্ক্রিপ্টের নির্দিষ্ট বৈশিষ্ট্যগুলি বন্ধ করার সিদ্ধান্ত নিতে পারেন যার জন্য ব্যবহারকারী যে অনুমতিগুলি দেননি সেগুলি প্রয়োজন, অথবা অনুপস্থিত অনুমতিগুলি ব্যাখ্যা করে একটি কাস্টম ডায়ালগ উপস্থাপন করতে পারেন। নিম্নলিখিত পদ্ধতিগুলি ব্যবহারকারীর অনুমতির তথ্য সহ একটি অবজেক্ট পায় যার মধ্যে ব্যবহারকারী কোন স্কোপগুলিকে অনুমোদিত করেছেন এবং একটি URL থাকে যা আপনাকে কোনও অনুপস্থিত স্কোপ অনুরোধ করতে দেয়:
-
getAuthorizationInfo(authMode, oAuthScopes): নির্দিষ্ট স্কোপের জন্য অনুমতির স্থিতি পরীক্ষা করতে এই পদ্ধতিটি ব্যবহার করুন। -
getAuthorizationInfo(authMode): আপনার স্ক্রিপ্ট দ্বারা ব্যবহৃত সমস্ত স্কোপের অনুমতির স্থিতি পরীক্ষা করতে এই পদ্ধতিটি ব্যবহার করুন।
অনুমোদন তথ্য অবজেক্ট থেকে অনুমতির বিবরণ পেতে, যেমন কোন স্কোপগুলি অনুমোদিত হয়েছে তার তালিকা এবং অনুপস্থিত অনুমতিগুলির অনুরোধ করার জন্য একটি URL, 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 ক্লায়েন্ট যাচাইকরণের মধ্য দিয়ে যেতে হবে। আরও তথ্যের জন্য, নিম্নলিখিত নির্দেশিকাগুলি দেখুন:
- অ্যাপস স্ক্রিপ্টের জন্য OAuth ক্লায়েন্ট যাচাইকরণ
- যাচাই না করা অ্যাপ
- OAuth যাচাইকরণের প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী
- গুগল এপিআই পরিষেবা: ব্যবহারকারীর ডেটা নীতি
সীমাবদ্ধ সুযোগ
সংবেদনশীল স্কোপ ছাড়াও, কিছু স্কোপকে সীমাবদ্ধ হিসাবে শ্রেণীবদ্ধ করা হয় এবং অতিরিক্ত নিয়মের আওতায় রাখা হয় যা ব্যবহারকারীর ডেটা সুরক্ষিত রাখতে সাহায্য করে। যদি আপনি এমন একটি ওয়েব অ্যাপ বা অ্যাড-অন প্রকাশ করতে চান যা এক বা একাধিক সীমাবদ্ধ স্কোপ ব্যবহার করে, তাহলে অ্যাপটিকে প্রকাশ করার আগে সমস্ত নির্দিষ্ট বিধিনিষেধ মেনে চলতে হবে।
প্রকাশ করার চেষ্টা করার আগে সীমাবদ্ধ স্কোপের সম্পূর্ণ তালিকা পর্যালোচনা করুন। যদি আপনার অ্যাপ এগুলির কোনওটি ব্যবহার করে, তাহলে প্রকাশের আগে আপনাকে নির্দিষ্ট API স্কোপের জন্য অতিরিক্ত প্রয়োজনীয়তাগুলি মেনে চলতে হবে।