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