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 = onUserCreate>d(
  { secrets: [emailApiKey] },
  async (event) = {
    const { uid, email, displayName } = event.data;

    if (!email) {
      logger.log(`User ${uid} does not have an email address.`);
      return;
    }

    amail(email, displayName);
  },
);newUserWelcome.js

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, displayNametenants.js

अगर आपका प्रोजेक्ट 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 = onUserDelete>d(
  { secrets: [emailApiKey] },
  async (event) = {
    const { uid, email, displayName } = event.data;
    if (!email) {
      logger.log(`User ${uid} does not have an email address.`);
      return;
    }

    aemail, displayName);
  },
);deletedUserFarewell.js

onUserCreated की तरह ही, onUserDeleted को { tenantId: IS_NOT_TENANT } जैसे विकल्पों के साथ कॉन्फ़िगर किया जा सकता है. इससे डिफ़ॉल्ट प्रोजेक्ट में उपयोगकर्ताओं के लिए ट्रिगर को सीमित किया जा सकता है.

ब्लॉक करने वाले फ़ंक्शन ट्रिगर करना

अगर आपने Firebase Authentication with Identity Platform पर अपग्रेड किया है, तो ब्लॉक करने वाले फ़ंक्शन का इस्तेमाल करके, Firebase Authentication को बढ़ाया जा सकता है.

ब्लॉक करने वाले फ़ंक्शन की मदद से, कस्टम कोड को सिंक्रोनस तरीके से चलाया जा सकता है. इससे आपके ऐप्लिकेशन में रजिस्टर करने या साइन इन करने वाले उपयोगकर्ता के नतीजे में बदलाव होता है. बैकग्राउंड ट्रिगर, किसी इवेंट के खत्म होने के बाद एसिंक्रोनस तरीके से चलते हैं. हालांकि, ब्लॉक करने वाले फ़ंक्शन की मदद से, किसी उपयोगकर्ता को पुष्टि करने से रोका जा सकता है. ऐसा तब होता है, जब वह कुछ शर्तों को पूरा नहीं करता. इसके अलावा, उपयोगकर्ता की जानकारी और दावों को आपके क्लाइंट ऐप्लिकेशन पर वापस भेजने से पहले, उन्हें अपडेट किया जा सकता है.

दूसरी जनरेशन के ट्रिगर के लिए सबसे सही तरीके

दूसरी जनरेशन के ऑथेंटिकेशन ट्रिगर लागू करते समय, इन सबसे सही तरीकों को ध्यान में रखें:

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