Firebase से पुष्टि करने वाले ट्रिगर

Firebase Authentication उपयोगकर्ता खातों को बनाने और मिटाने के जवाब में, फ़ंक्शन ट्रिगर किए जा सकते हैं. उदाहरण के लिए, आपके ऐप्लिकेशन में खाता बनाने वाले उपयोगकर्ता को वेलकम ईमेल भेजा जा सकता है. इस पेज पर दिए गए उदाहरण, एक ऐसे सैंपल पर आधारित हैं जो ठीक यही काम करता है—खाता बनाने और मिटाने पर, वेलकम और फ़ेयरवेल ईमेल भेजता है.

इस्तेमाल के उदाहरणों के बारे में ज़्यादा जानने के लिए, मैं Cloud Functions का इस्तेमाल करके क्या कर सकता/सकती हूं? लेख पढ़ें.

उपयोगकर्ता खाता बनाने पर कोई फ़ंक्शन ट्रिगर करना

आपके पास ऐसा फ़ंक्शन बनाने का विकल्प है जो Authentication उपयोगकर्ता के बनाए जाने पर ट्रिगर होता है. इसके लिए, firebase-functions/v2/identity सबपैकेज से onUserCreated इवेंट हैंडलर का इस्तेमाल करें:

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 multi-tenancy का इस्तेमाल करता है, तो ट्रिगर को स्कोप किया जा सकता है:

  • डिफ़ॉल्ट प्रोजेक्ट (कोई टेनेंट नहीं): सिर्फ़ डिफ़ॉल्ट प्रोजेक्ट में बनाए गए उपयोगकर्ताओं को सुनने के लिए, 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: आईएसओ 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) के इंस्टेंस, एक साथ कई अनुरोधों को प्रोसेस करते हैं. सीपीयू की संख्या एक या इससे ज़्यादा होने पर, डिफ़ॉल्ट रूप से एक साथ 80 अनुरोध प्रोसेस किए जाते हैं. पक्का करें कि आपका फ़ंक्शन, एक साथ होने वाले एक्ज़ीक्यूशन के बीच ग्लोबल म्यूटेबल स्टेट पर निर्भर न हो.
  • आइडमपोटेंसी के लिए डिज़ाइन: दूसरी जनरेशन में इवेंट की डिलीवरी, Eventarc के ज़रिए कम से कम एक बार होती है. पक्का करें कि आपके फ़ंक्शन आइडमपोटेंट हों. उदाहरण के लिए, पुष्टि करें कि खराब असर होने से पहले, वेलकम ईमेल पहले से नहीं भेजा गया है या डेटाबेस एंट्री शुरू नहीं की गई है.
  • मल्टी-टेनेंट फ़ंक्शन का दायरा तय करना: अगर आपका ऐप्लिकेशन, Identity Platform की मल्टी-टेनेंसी सुविधा का इस्तेमाल करता है, तो पुष्टि करें कि आपके फ़ंक्शन सभी टेनेंट के इवेंट मैनेज करें या सिर्फ़ कुछ टेनेंट के. tenantId: IS_NOT_TENANT का इस्तेमाल करें, ताकि टेनेंट के उपयोगकर्ता ऐसे फ़ंक्शन ट्रिगर न कर पाएं जो सिर्फ़ प्राइमरी प्रोजेक्ट के लिए हैं.
  • क्षेत्र और संसाधन आवंटन मैनेज करना: फ़ंक्शन की जगह (region) की जानकारी दें, ताकि पुष्टि करने की सेवा देने वाली कंपनी और फ़ंक्शन को लागू करने के एनवायरमेंट के बीच नेटवर्क के इंतज़ार का समय कम किया जा सके.