Firebase যাচাইকরণ ট্রিগার

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-এর জন্য ব্যবহারকারী তৈরি করার ইভেন্ট ট্রিগার করবে যখন:

  • কোনও ব্যবহারকারী ইমেল অ্যাকাউন্ট ও পাসওয়ার্ড তৈরি করেন।
  • কোনও ব্যবহারকারী ফেডারেটেড পরিচয় প্রদানকারী ব্যবহার করে প্রথমবার সাইন-ইন করেন।
  • ডেভেলপার Admin 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) যাতে আপনার যাচাইকরণ প্রদানকারী ও ফাংশন এক্সিকিউশন এনভায়রনমেন্টের মধ্যে নেটওয়ার্ক লেটেন্সি কমানো যায়।