Firebase Authentication ব্যবহারকারীর অ্যাকাউন্ট তৈরি ও মুছে ফেলার রেসপন্স হিসেবে আপনি ফাংশন ট্রিগার করতে পারবেন। যেমন, আপনার অ্যাপে অ্যাকাউন্ট তৈরি করেছেন এমন ব্যবহারকারীকে আপনি স্বাগত ইমেল পাঠাতে পারেন। এই পৃষ্ঠায় দেওয়া উদাহরণগুলি এমন একটি স্যাম্পেলের উপর ভিত্তি করে তৈরি করা হয়েছে যা ঠিক এই কাজটিই করে—অ্যাকাউন্ট তৈরি ও মুছে ফেলার সময় স্বাগত ও বিদায় ইমেল পাঠায়।
ব্যবহারের আরও উদাহরণের জন্য, Cloud Functions-এর মাধ্যমে আমি কী করতে পারি? দেখুন।
ব্যবহারকারী তৈরি করার সময় ফাংশন ট্রিগার করুন
আপনি এমন একটি ফাংশন তৈরি করতে পারেন যা firebase-functions/v2/identity সাবপ্যাকেজ থেকে
onUserCreated
ইভেন্ট হ্যান্ডলার ব্যবহার করে
Authentication ব্যবহারকারী তৈরি করার সময় ট্রিগার করে:
const { onUserCreated } = require("firebase-functions/identity"); const { defineSecret } = require("firebase-functions/params"); const { logger } = require("firebase-functions"); const { sendWelcomeEmail } = require("./utils/myEmailService"); const emailApiKey = defineSecret("EMAIL_API_KEY"); exports.newUserWelcome = onUserCreated( { secrets: [emailApiKey] }, async (event) => { const { uid, email, displayName } = event.data; if (!email) { logger.log(`User ${uid} does not have an email address.`); return; } await sendWelcomeEmail(email, displayName); }, );
Authentication অ্যাকাউন্ট Cloud Functions-এর জন্য ব্যবহারকারী তৈরি করার ইভেন্ট ট্রিগার করবে যখন:
- ব্যবহারকারী একটি ইমেল অ্যাকাউন্ট ও পাসওয়ার্ড তৈরি করেন।
- কোনও ব্যবহারকারী ফেডারেটেড পরিচয় প্রদানকারী ব্যবহার করে প্রথমবার সাইন-ইন করেন।
- ডেভেলপার অ্যাডমিন SDK ব্যবহার করে অ্যাকাউন্ট তৈরি করেন।
- কোনও ব্যবহারকারী প্রথমবার নতুন বেনামী অথ সেশনে সাইন-ইন করেন।
কোনও ব্যবহারকারী কাস্টম টোকেন ব্যবহার করে প্রথমবার সাইন-ইন করলে, Cloud Functions ইভেন্ট ট্রিগার করা হয় না।
ট্রিগার বিকল্প ও মাল্টি-টেনেন্সি কনফিগার করা
আপনি onUserCreated-এর প্রথম প্যারামিটার হিসেবে একটি বিকল্প অবজেক্ট (AuthOptions) পাস করে আপনার ফাংশন কনফিগার করতে পারেন:
/** * Sends a welcome email scoped to a specific tenant in Identity Platform. */ exports.sendWelcomeEmailToTenant = onUserCreated( { secrets: [emailApiKey], // Only trigger when a user is a member of this tenant tenantId: "my-tenant-id", }, async (event) => { const { uid, email, displayName } = event.data; // Customize the email for this tenant await sendWelcomeEmail(email, displayName, event.tenantId); }, ); /** * Sends a welcome email only to users not associated with any tenant. */ exports.sendWelcomeEmailNoTenant = onUserCreated( { secrets: [emailApiKey], // Only trigger when a user is NOT a member of a tenant tenantId: IS_NOT_TENANT, }, async (event) => { const { email, displayName } = event.data; // Send a generic welcome email await sendWelcomeEmail(email, displayName); }, );
আপনার প্রোজেক্টে Identity Platform মাল্টি-টেনেন্সি ব্যবহার করা হলে, আপনি ট্রিগার স্কোপ করতে পারবেন:
- ডিফল্ট প্রোজেক্ট (কোনও টেন্যান্ট নেই): ডিফল্ট প্রোজেক্টে তৈরি করা ব্যবহারকারীদের জন্য
শুধুমাত্র শুনতে
tenantIdথেকেIS_NOT_TENANTসেট করুন। - নির্দিষ্ট টেন্যান্ট: শুধুমাত্র সেই টেন্যান্টে তৈরি করা ব্যবহারকারীদের জন্য শোনার জন্য টেন্যান্টের স্ট্রিং আইডি (যেমন,
{ tenantId: "tenant-id-1" }) প্রদান করুন। - সব টেন্যান্ট ও ব্যবহারকারী:
tenantIdবাদ দেওয়া হলে, প্রোজেক্টের সব টেন্যান্ট ও ডিফল্ট প্রোজেক্ট ব্যবহারকারী জুড়ে ব্যবহারকারী তৈরি করার ইভেন্টে ফাংশনটি ট্রিগার করে।
tenantId ছাড়াও, আপনি স্ট্যান্ডার্ড ২য় জেনারেশন কনফিগারেশন
বিকল্প নির্দিষ্ট করতে পারেন যার মধ্যে region, concurrency, cpu, memory, timeoutSeconds,
minInstances, maxInstances, এবং secrets অন্তর্ভুক্ত।
ব্যবহারকারীর অ্যাট্রিবিউট অ্যাক্সেস করুন
আপনার ফাংশনে ফেরত আসা ব্যবহারকারীর ডেটা থেকে, আপনি নতুন তৈরি করা ব্যবহারকারীর
UserRecord
অবজেক্টে event.data-এর মাধ্যমে উপলভ্য ব্যবহারকারীর অ্যাট্রিবিউটের তালিকা অ্যাক্সেস করতে পারবেন। যেমন, আপনি ব্যবহারকারীর ইমেল আইডি ও ডিসপ্লে নাম
এইভাবে পেতে পারেন:
const { uid, email, displayName } = event.data;
২য় জেনারেশনে যাচাইকরণ ট্রিগার একটি
AuthEvent
অবজেক্ট পায়। event.data ছাড়াও, আপনি ইভেন্ট মেটাডেটা অ্যাক্সেস করতে পারবেন, যেমন:
event.id: ইভেন্টের জন্য অনন্য শনাক্তকারী।event.type: ইভেন্টের ধরন (google.firebase.auth.user.v2.created)।event.time: ইভেন্ট কখন ঘটেছে তা ISO 8601 টাইমস্ট্যাম্পের মাধ্যমে দেখানো হয়।event.project: Google Cloud প্রোজেক্ট আইডি।event.tenantId: প্রযোজ্য হলে, ব্যবহারকারীর সাথে যুক্ত Identity Platform টেন্যান্ট আইডি।
ব্যবহারকারী মুছে ফেলার সময় একটি ফাংশন ট্রিগার করুন
ব্যবহারকারী তৈরি করার সময় আপনি যেমন কোনও ফাংশন ট্রিগার করতে পারেন, ঠিক তেমনই ব্যবহারকারী
মুছে দেওয়ার ইভেন্টে আপনি প্রতিক্রিয়া জানাতে পারেন। firebase-functions/v2/identity থেকে
onUserDeleted
ইভেন্ট হ্যান্ডলার ব্যবহার করুন, যেমন দেখানো হয়েছে:
const { onUserDeleted } = require("firebase-functions/identity"); const { defineSecret } = require("firebase-functions/params"); const { logger } = require("firebase-functions"); const { sendGoodbyeEmail } = require("./utils/myEmailService"); const emailApiKey = defineSecret("EMAIL_API_KEY"); exports.deletedUserFarewell = onUserDeleted( { secrets: [emailApiKey] }, async (event) => { const { uid, email, displayName } = event.data; if (!email) { logger.log(`User ${uid} does not have an email address.`); return; } await sendGoodbyeEmail(email, displayName); }, );
onUserCreated-এর মতো, আপনি onUserDeleted-কে { tenantId: IS_NOT_TENANT }-এর মতো বিকল্পের সাহায্যে কনফিগার করতে পারেন যাতে ডিফল্ট প্রোজেক্টে ব্যবহারকারীদের জন্য ট্রিগার সীমাবদ্ধ করা যায়।
ব্লকিং ফাংশন ট্রিগার করুন
আপনি Firebase Authentication with Identity Platform-এ আপগ্রেড করে থাকলে, ব্লকিং ফাংশন ব্যবহার করে Firebase Authentication-এর মেয়াদ বাড়াতে পারবেন।
ব্লকিং ফাংশন আপনাকে কাস্টম কোড সিঙ্ক্রোনাসভাবে কার্যকর করতে দেয় যা আপনার অ্যাপে ব্যবহারকারীর রেজিস্ট্রেশন বা সাইন-ইন করার ফলাফল পরিবর্তন করে। ব্যাকগ্রাউন্ড ট্রিগারের বিপরীতে, যা একটি ইভেন্ট শেষ হওয়ার পরে অ্যাসিঙ্ক্রোনাসভাবে চলে, ব্লকিং ফাংশন আপনাকে কোনও ব্যবহারকারীকে যাচাইকরণ করা থেকে বিরত রাখতে দেয় যদি তারা নির্দিষ্ট মানদণ্ড পূরণ না করে, অথবা আপনার ক্লায়েন্ট অ্যাপে ফেরত দেওয়ার আগে ব্যবহারকারীর তথ্য এবং দাবি আপডেট করতে দেয়।
২য় জেনারেশন ট্রিগারের জন্য পেশাদার পদ্ধতি
২য় জেনারেশন যাচাইকরণ ট্রিগার প্রয়োগ করার সময়, নিম্নলিখিত পেশাদার পদ্ধতিগুলি মনে রাখবেন:
- কনকারেন্সির জন্য অ্যাকাউন্ট: Cloud Functions (2nd gen) ইনস্ট্যান্স প্রসেস কনকারেন্ট অনুরোধ (CPU ≥ ১ হলে ডিফল্ট হিসেবে ৮০টি কনকারেন্ট অনুরোধ)। আপনার ফাংশন যাতে একই সাথে চলা এক্সিকিউশনের মধ্যে গ্লোবাল মিউটেবল স্টেটের উপর নির্ভর না করে তা নিশ্চিত করুন।
- আইডেমপোটেন্সির জন্য ডিজাইন: ২য় জেনারেশনে ইভেন্ট ডেলিভারি Eventarc-এর মাধ্যমে অন্তত একবার হয়। আপনার ফাংশনগুলি আইডেমপোটেন্ট কিনা তা নিশ্চিত করুন; যেমন, সাইড এফেক্ট পারফর্ম করার আগে একটি স্বাগত ইমেল ইতিমধ্যে পাঠানো হয়নি বা একটি ডেটাবেস এন্ট্রি শুরু করা হয়েছে কিনা তা যাচাই করুন।
- মাল্টি-টেন্যান্ট ফাংশনের স্কোপ: আপনার অ্যাপ্লিকেশন Identity Platform
মাল্টি-টেনেন্সি ব্যবহার করলে, আপনার ফাংশন সব টেন্যান্ট জুড়ে ইভেন্ট ম্যানেজ করবে নাকি শুধুমাত্র নির্দিষ্ট কিছু ইভেন্ট ম্যানেজ করবে তা যাচাই করুন। শুধুমাত্র প্রাথমিক প্রোজেক্টের জন্য নির্দিষ্ট ফাংশন যাতে টেন্যান্ট ব্যবহারকারীরা ট্রিগার করতে না পারেন, তার জন্য
tenantId: IS_NOT_TENANTব্যবহার করুন। - অঞ্চল ও রিসোর্স বরাদ্দকরণ ম্যানেজ করা: আপনার যাচাইকরণ পরিষেবা প্রদানকারী
ও ফাংশন এক্সিকিউশন এনভায়রনমেন্টের মধ্যে নেটওয়ার্ক লেটেন্সি কমাতে ফাংশন লোকেশন
(
region) নির্দিষ্ট করুন।