ফায়ারবেস প্রমাণীকরণ ট্রিগার

আপনি Firebase Authentication ব্যবহারকারী অ্যাকাউন্ট তৈরি এবং মুছে ফেলার প্রতিক্রিয়ায় বিভিন্ন ফাংশন চালু করতে পারেন। উদাহরণস্বরূপ, আপনি আপনার অ্যাপে সদ্য অ্যাকাউন্ট তৈরি করা কোনো ব্যবহারকারীকে একটি স্বাগত ইমেল পাঠাতে পারেন। এই পৃষ্ঠার উদাহরণগুলো এমন একটি স্যাম্পলের উপর ভিত্তি করে তৈরি, যা অ্যাকাউন্ট তৈরি এবং মুছে ফেলার পর ঠিক এই কাজটিই করে—অর্থাৎ স্বাগত এবং বিদায়ী ইমেল পাঠায়।

ব্যবহারের আরও উদাহরণের জন্য, “ক্লাউড ফাংশন দিয়ে আমি কী করতে পারি?” দেখুন।

ব্যবহারকারী তৈরির সময় একটি ফাংশন চালু করুন

আপনি 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 অ্যাকাউন্টগুলি ক্লাউড ফাংশনের জন্য ব্যবহারকারী তৈরির ইভেন্টগুলি ট্রিগার করবে:

  • একজন ব্যবহারকারী একটি ইমেল অ্যাকাউন্ট ও পাসওয়ার্ড তৈরি করেন।
  • একজন ব্যবহারকারী একটি ফেডারেটেড আইডেন্টিটি প্রোভাইডার ব্যবহার করে প্রথমবার সাইন ইন করেন।
  • ডেভেলপার অ্যাডমিন এসডিকে ব্যবহার করে একটি অ্যাকাউন্ট তৈরি করেন।
  • একজন ব্যবহারকারী প্রথমবারের মতো একটি নতুন বেনামী প্রমাণীকরণ সেশনে সাইন ইন করেন।

কোনো ব্যবহারকারী কাস্টম টোকেন ব্যবহার করে প্রথমবার সাইন ইন করলে কোনো ক্লাউড ফাংশনস ইভেন্ট ট্রিগার হয় না ।

ট্রিগার বিকল্প এবং মাল্টি-টেনেন্সি কনফিগার করুন

আপনি 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);
  },
);

আপনার প্রজেক্টে যদি আইডেন্টিটি প্ল্যাটফর্ম মাল্টি-টেনেন্সি ব্যবহার করা হয়, তাহলে আপনি ট্রিগারটির পরিধি নির্ধারণ করতে পারেন:

  • ডিফল্ট প্রজেক্ট (কোনো টেন্যান্ট নেই) : শুধুমাত্র ডিফল্ট প্রজেক্টে তৈরি করা ব্যবহারকারীদের তথ্য শোনার জন্য tenantId IS_NOT_TENANT এ সেট করুন।
  • নির্দিষ্ট টেন্যান্ট : শুধুমাত্র সেই টেন্যান্টে তৈরি হওয়া ব্যবহারকারীদের তথ্য শোনার জন্য টেন্যান্টটির স্ট্রিং আইডি প্রদান করুন (উদাহরণস্বরূপ, { tenantId: "tenant-id-1" } )।
  • সকল টেন্যান্ট এবং ব্যবহারকারী : যদি tenantId বাদ দেওয়া হয়, তাহলে এই ফাংশনটি প্রজেক্টের সকল টেন্যান্ট এবং ডিফল্ট ব্যবহারকারীদের ক্ষেত্রে ব্যবহারকারী তৈরির ইভেন্টে সক্রিয় হয়।

tenantId ছাড়াও, আপনি region , concurrency , cpu , memory , timeoutSeconds , minInstances , maxInstances , এবং secrets সহ স্ট্যান্ডার্ড ২য় প্রজন্মের কনফিগারেশন অপশনগুলো নির্দিষ্ট করতে পারেন।

ব্যবহারকারীর বৈশিষ্ট্য অ্যাক্সেস করুন

আপনার ফাংশনে ফেরত আসা ইউজার ডেটা থেকে, আপনি event.data এর মাধ্যমে নতুন তৈরি হওয়া ইউজারের UserRecord অবজেক্টে থাকা ইউজার অ্যাট্রিবিউটগুলোর তালিকা অ্যাক্সেস করতে পারেন। উদাহরণস্বরূপ, আপনি দেখানো উপায়ে ইউজারের ইমেল এবং ডিসপ্লে নেম পেতে পারেন:

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 : গুগল ক্লাউড প্রজেক্ট আইডি।
  • event.tenantId : ব্যবহারকারীর সাথে যুক্ত আইডেন্টিটি প্ল্যাটফর্ম টেন্যান্ট আইডি, যদি প্রযোজ্য হয়।

ব্যবহারকারী মুছে ফেলার ক্ষেত্রে একটি ফাংশন চালু করুন

ব্যবহারকারী তৈরির সময় যেমন আপনি কোনো ফাংশন ট্রিগার করতে পারেন, ঠিক তেমনি ব্যবহারকারী মুছে ফেলার ইভেন্টেও সাড়া দিতে পারেন। 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 প্রসারিত করতে পারেন।

ব্লকিং ফাংশন আপনাকে সিনক্রোনাসভাবে কাস্টম কোড এক্সিকিউট করার সুযোগ দেয়, যা আপনার অ্যাপে কোনো ব্যবহারকারীর রেজিস্ট্রেশন বা সাইন ইন করার ফলাফলকে পরিবর্তন করে। ব্যাকগ্রাউন্ড ট্রিগারের মতো নয়, যা কোনো ইভেন্ট শেষ হওয়ার পর অ্যাসিঙ্ক্রোনাসভাবে চলে, ব্লকিং ফাংশন আপনাকে নির্দিষ্ট শর্ত পূরণ না করলে কোনো ব্যবহারকারীকে অথেন্টিকেট করা থেকে বিরত রাখতে, অথবা আপনার ক্লায়েন্ট অ্যাপে ফেরত পাঠানোর আগে ব্যবহারকারীর তথ্য ও ক্লেইমস আপডেট করতে সাহায্য করে।

দ্বিতীয় প্রজন্মের ট্রিগারগুলির জন্য সর্বোত্তম অনুশীলন

দ্বিতীয় প্রজন্মের অথেনটিকেশন ট্রিগার প্রয়োগ করার সময় নিম্নলিখিত সর্বোত্তম অনুশীলনগুলি মনে রাখবেন:

  • যুগপৎ কার্যসম্পাদনের বিষয়টি বিবেচনা করুন : ক্লাউড ফাংশন (২য় প্রজন্ম) ইনস্ট্যান্সগুলো যুগপৎ অনুরোধসমূহ প্রসেস করে (সিপিইউ ≥ ১ হলে ডিফল্টভাবে ৮০টি যুগপৎ অনুরোধ)। নিশ্চিত করুন যে আপনার ফাংশনটি যুগপৎ কার্যসম্পাদনের মধ্যবর্তী সময়ে গ্লোবাল পরিবর্তনযোগ্য অবস্থার উপর নির্ভর করে না।
  • আইডম্পোটেন্সির জন্য ডিজাইন করুন : দ্বিতীয় প্রজন্মের ইভেন্ট ডেলিভারি ইভেন্টআর্কের মাধ্যমে অ্যাট-লিস্ট-ওয়ান্স পদ্ধতিতে হয়ে থাকে। আপনার ফাংশনগুলো যেন আইডম্পোটেন্ট হয়, তা নিশ্চিত করুন; উদাহরণস্বরূপ, সাইড এফেক্ট সম্পাদন করার আগে যাচাই করে নিন যে কোনো ওয়েলকাম ইমেল আগে থেকেই পাঠানো হয়নি বা কোনো ডাটাবেস এন্ট্রি ইনিশিয়ালাইজ করা হয়নি।
  • মাল্টি-টেন্যান্ট ফাংশনের পরিধি : যদি আপনার অ্যাপ্লিকেশন আইডেন্টিটি প্ল্যাটফর্ম মাল্টি-টেন্যান্সি ব্যবহার করে, তবে যাচাই করুন যে আপনার ফাংশনগুলি সমস্ত টেন্যান্টের ইভেন্টগুলি পরিচালনা করবে নাকি শুধুমাত্র নির্দিষ্ট কিছু টেন্যান্টের। টেন্যান্ট ব্যবহারকারীদের শুধুমাত্র প্রাথমিক প্রকল্পের জন্য উদ্দিষ্ট ফাংশনগুলি ট্রিগার করা থেকে বিরত রাখতে tenantId: IS_NOT_TENANT ব্যবহার করুন।
  • অঞ্চল এবং রিসোর্স বরাদ্দ পরিচালনা করুন : আপনার অথেনটিকেশন প্রোভাইডার এবং ফাংশন এক্সিকিউশন এনভায়রনমেন্টের মধ্যে নেটওয়ার্ক ল্যাটেন্সি কমানোর জন্য ফাংশনের অবস্থান ( region ) নির্দিষ্ট করুন।