अगर आपने Firebase JS SDK टूल या Firebase के अन्य क्लाइंट SDK टूल का इस्तेमाल किया है, तो शायद आपको FirebaseApp इंटरफ़ेस के बारे में पता होगा. साथ ही, आपको यह भी पता होगा कि ऐप्लिकेशन इंस्टेंस को कॉन्फ़िगर करने के लिए इसका इस्तेमाल कैसे किया जाता है. सर्वर साइड पर भी इसी तरह के ऑपरेशन करने के लिए, Firebase FirebaseServerApp उपलब्ध कराता है.
FirebaseServerApp , FirebaseApp का एक ऐसा वर्शन है जिसका इस्तेमाल सर्वर-साइड रेंडरिंग (एसएसआर) वाले एनवायरमेंट में किया जाता है. इसमें ऐसे टूल शामिल हैं जिनकी मदद से, Firebase सेशन को जारी रखा जा सकता है. ये सेशन, क्लाइंट साइड रेंडरिंग (सीएसआर) / सर्वर-साइड रेंडरिंग के बीच के अंतर को पाटते हैं. इन
टूल और रणनीतियों की मदद से, Firebase की मदद से बनाए गए और
Google के एनवायरमेंट में डिप्लॉय किए गए डाइनैमिक वेब ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है. जैसे, Firebase App Hosting.
FirebaseServerApp का इस्तेमाल इन कामों के लिए करें:
- उपयोगकर्ता के कॉन्टेक्स्ट में, सर्वर-साइड कोड को एक्ज़ीक्यूट करना. इसके उलट, Firebase Admin SDK टूल के पास पूरे एडमिन के अधिकार होते हैं.
- एसएसआर एनवायरमेंट में, App Check का इस्तेमाल करना.
- क्लाइंट में बनाए गए Firebase Auth सेशन को जारी रखना.
FirebaseServerApp का लाइफ़साइकल
सर्वर-साइड रेंडरिंग (एसएसआर) फ़्रेमवर्क और अन्य नॉन-ब्राउज़र रनटाइम, जैसे कि क्लाउड वर्कर, कई बार एक्ज़ीक्यूट होने पर संसाधनों का फिर से इस्तेमाल करके, इनिशियलाइज़ेशन के समय को ऑप्टिमाइज़ करते हैं. FirebaseServerApp को रेफ़रंस काउंट मैकेनिज़्म का इस्तेमाल करके, इन एनवायरमेंट के हिसाब से डिज़ाइन किया गया है. अगर कोई ऐप्लिकेशन, initializeServerApp को पिछले initializeServerApp के जैसे ही पैरामीटर के साथ कॉल करता है, तो उसे वही FirebaseServerApp इंस्टेंस मिलता है जो पहले से इनिशियलाइज़ किया गया था. इससे, इनिशियलाइज़ेशन के लिए लगने वाले बेवजह के ओवरहेड और मेमोरी के एलोकेशन को कम किया जा सकता है. जब किसी FirebaseServerApp इंस्टेंस पर deleteApp को कॉल किया जाता है, तो रेफ़रंस काउंट कम हो जाता है. साथ ही, रेफ़रंस काउंट शून्य होने के बाद, इंस्टेंस को रिलीज़ कर दिया जाता है.
FirebaseServerApp इंस्टेंस को मिटाना
FirebaseServerApp इंस्टेंस पर deleteApp को कब कॉल करना है, यह जानना मुश्किल हो सकता है. खास तौर पर, अगर कई एसिंक्रोनस ऑपरेशन एक साथ चल रहे हों. FirebaseServerAppSettings का releaseOnDeref फ़ील्ड, इसे आसान बनाने में मदद करता है. अगर releaseOnDeref को किसी ऐसे ऑब्जेक्ट का रेफ़रंस असाइन किया जाता है जिसकी लाइफ़स्पैन, अनुरोध के स्कोप के बराबर हो (उदाहरण के लिए, एसएसआर अनुरोध का हेडर ऑब्जेक्ट), तो फ़्रेमवर्क के हेडर ऑब्जेक्ट को वापस पाने पर, FirebaseServerApp अपना रेफ़रंस काउंट कम कर देगा. इससे, आपका FirebaseServerApp इंस्टेंस अपने-आप मिट जाएगा.
releaseOnDeref के इस्तेमाल का एक उदाहरण यहां दिया गया है:
/// Next.js
import { headers } from 'next/headers'
import { FirebaseServerAppSettings, initializeServerApp} from "firebase/app";
export default async function Page() {
const headersObj = await headers();
let appSettings: FirebaseServerAppSettings = {};
appSettings.releaseOnDeref = headersObj;
const serverApp = initializeServerApp(firebaseConfig, appSettings);
...
}
क्लाइंट पर बनाए गए पुष्टि किए गए सेशन फिर से शुरू करना
जब Auth आईडी टोकन के साथ FirebaseServerApp का कोई इंस्टेंस इनिशियलाइज़ किया जाता है, तो इससे क्लाइंट-साइड रेंडरिंग (सीएसआर) और सर्वर-साइड रेंडरिंग (एसएसआर) एनवायरमेंट के बीच, पुष्टि किए गए उपयोगकर्ता सेशन को ब्रिज किया जा सकता है. Firebase Auth SDK के ऐसे इंस्टेंस जिन्हें Auth आईडी टोकन वाले FirebaseServerApp ऑब्जेक्ट के साथ इनिशियलाइज़ किया गया है, इनिशियलाइज़ेशन के दौरान उपयोगकर्ता को साइन इन करने की कोशिश करेंगे. इसके लिए, ऐप्लिकेशन को किसी भी साइन-इन तरीके को कॉल करने की ज़रूरत नहीं होगी.
Auth आईडी टोकन उपलब्ध कराने से, ऐप्लिकेशन क्लाइंट पर Auth के किसी भी साइन-इन तरीके का इस्तेमाल कर सकते हैं. इससे यह पक्का होता है कि सेशन सर्वर-साइड पर जारी रहे. भले ही, इन साइन-इन तरीकों के लिए उपयोगकर्ता के इंटरैक्शन की ज़रूरत हो. इसके अलावा, इससे पुष्टि किए गए Firestore क्वेरी जैसे इंटेंसिव ऑपरेशन को सर्वर पर ऑफ़लोड किया जा सकता है. इससे आपके ऐप्लिकेशन की रेंडरिंग परफ़ॉर्मेंस बेहतर होनी चाहिए.
/// Next.js
import { initializeServerApp } from "firebase/app";
import { getAuth } from "firebase/auth";
// Replace the following with your app's
// Firebase project configuration
const firebaseConfig = {
// ...
};
const firebaseServerAppSettings = {
authIdToken: token // See "Pass client tokens to the server side
// rendering phase" for an example on how transmit
// the token from the client and the server.
}
const serverApp =
initializeServerApp(firebaseConfig,
firebaseServerAppSettings);
const serverAuth = getAuth(serverApp);
// FirebaseServerApp and Auth will now attempt
// to sign in the current user based on provided
// authIdToken.
एसएसआर एनवायरमेंट में App Check का इस्तेमाल करना
App Check को लागू करने के लिए, App Check SDK टूल के ऐसे इंस्टेंस की ज़रूरत होती है जिनका इस्तेमाल Firebase SDK टूल, इंटरनल तौर पर getToken को कॉल करने के लिए करते हैं. इसके बाद, जनरेट हुए टोकन को Firebase की सभी सेवाओं के अनुरोधों में शामिल किया जाता है. इससे, बैकएंड को ऐप्लिकेशन की पुष्टि करने में मदद मिलती है.
हालांकि, App Check SDK टूल को ऐप्लिकेशन की पुष्टि के लिए, खास यूरिस्टिक्स को ऐक्सेस करने के लिए ब्राउज़र की ज़रूरत होती है. इसलिए, इसे सर्वर एनवायरमेंट में इनिशियलाइज़ नहीं किया जा सकता.
FirebaseServerApp एक विकल्प उपलब्ध कराता है. अगर FirebaseServerApp को इनिशियलाइज़ करने के दौरान, क्लाइंट से जनरेट किया गया App Check टोकन उपलब्ध कराया जाता है, तो Firebase की सेवाओं को कॉल करते समय, Firebase प्रॉडक्ट SDK टूल इसका इस्तेमाल करेंगे. इससे, App Check SDK टूल के इंस्टेंस की ज़रूरत नहीं होगी.
/// Next.js
import { initializeServerApp } from "firebase/app";
// Replace the following with your app's
// Firebase project configuration
const firebaseConfig = {
// ...
};
const firebaseServerAppSettings = {
appCheckToken: token // See "Pass client tokens to the server side
// rendering phase" for an example on how transmit
// the token from the client and the server.
}
const serverApp =
initializeServerApp(firebaseConfig,
firebaseServerAppSettings);
// The App Check token will now be appended to all Firebase service requests.
क्लाइंट टोकन को सर्वर-साइड रेंडरिंग फ़ेज़ में पास करना
पुष्टि किए गए Auth आईडी टोकन (और App Check टोकन) को क्लाइंट से सर्वर-साइड रेंडरिंग (एसएसआर) फ़ेज़ में ट्रांसमिट करने के लिए, सर्विस वर्कर का इस्तेमाल करें. इस तरीके में, फ़ेच के उन अनुरोधों को इंटरसेप्ट किया जाता है जिनसे एसएसआर ट्रिगर होता है. साथ ही, टोकन को अनुरोध के हेडर में जोड़ा जाता है.
Firebase Auth सर्विस वर्कर के रेफ़रंस के तौर पर लागू करने के लिए, सर्विस वर्कर की मदद से सेशन मैनेजमेंट
देखें. साथ ही,
सर्वर साइड में किए गए बदलाव
देखें. इसमें, हेडर से इन टोकन को पार्स करने का तरीका बताने वाला कोड शामिल है. इसका इस्तेमाल
FirebaseServerApp को इनिशियलाइज़ करने के लिए किया जाता है.