एसएसआर (सर्वर साइड रेंडरिंग) की मदद से, डाइनैमिक वेब ऐप्लिकेशन में Firebase का इस्तेमाल करना

अगर आपने Firebase JS SDK टूल या Firebase के अन्य क्लाइंट SDK टूल का इस्तेमाल किया है, तो हो सकता है कि आप FirebaseApp इंटरफ़ेस और ऐप्लिकेशन इंस्टेंस को कॉन्फ़िगर करने के लिए, इसका इस्तेमाल करने के तरीके के बारे में जानते हों. सर्वर साइड पर मिलती-जुलती कार्रवाइयों को आसान बनाने के लिए, Firebase FirebaseServerApp उपलब्ध कराता है.

FirebaseServerApp, FirebaseApp का एक वैरिएंट है. इसका इस्तेमाल सर्वर-साइड रेंडरिंग (एसएसआर) एनवायरमेंट में किया जाता है. इसमें क्लाइंट साइड रेंडरिंग (सीएसआर) / सर्वर साइड रेंडरिंग के बीच के Firebase सेशन को जारी रखने के लिए टूल शामिल हैं. इन टूल और रणनीतियों की मदद से, Firebase की मदद से बनाए गए और Firebase App Hosting जैसे Google एनवायरमेंट में डिप्लॉय किए गए डाइनैमिक वेब ऐप्लिकेशन को बेहतर बनाया जा सकता है.

FirebaseServerApp का इस्तेमाल करके:

  • उपयोगकर्ता कॉन्टेक्स्ट में सर्वर-साइड कोड को लागू करें. यह Firebase Admin SDK टूल से अलग है, जिसके पास एडमिन के सभी अधिकार होते हैं.
  • एसएसआर (सर्वर साइड रेंडरिंग) वाले एनवायरमेंट में, ऐप्लिकेशन की जांच करने की सुविधा चालू करें.
  • क्लाइंट में बनाए गए Firebase Auth सेशन को जारी रखना.

FirebaseServerApp का लाइफ़साइकल

सर्वर साइड रेंडरिंग (एसएसआर) फ़्रेमवर्क और ब्राउज़र के अलावा, क्लाउड वर्कर्स जैसे अन्य रनटाइम, कई बार इस्तेमाल किए जाने वाले रिसॉर्स का फिर से इस्तेमाल करके, शुरू होने में लगने वाले समय को ऑप्टिमाइज़ करते हैं. FirebaseServerApp को रेफ़रंस काउंट वाले तरीके का इस्तेमाल करके, इन एनवायरमेंट के हिसाब से डिज़ाइन किया गया है. अगर कोई ऐप्लिकेशन, पिछले initializeServerApp के जैसे ही पैरामीटर के साथ initializeServerApp को शुरू करता है, तो उसे वही FirebaseServerApp इंस्टेंस मिलता है जो पहले से शुरू किया गया था. इससे, शुरू करने के लिए ज़रूरत से ज़्यादा मेमोरी का इस्तेमाल और मेमोरी के ऐलोकेशन में कमी आती है. जब deleteApp को FirebaseServerApp के किसी इंस्टेंस पर कॉल किया जाता है, तो इससे रेफ़रंस की गिनती कम हो जाती है. रेफ़रंस की गिनती शून्य होने के बाद, इंस्टेंस को खाली कर दिया जाता है.

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();
  appSettings.releaseOnDeref = headersObj;
  let appSettings: FirebaseServerAppSettings = {};
  const serverApp = initializeServerApp(firebaseConfig, appSettings);
  ...
}

क्लाइंट पर बनाए गए पुष्टि किए गए सेशन फिर से शुरू करना

जब FirebaseServerApp के किसी इंस्टेंस को Auth ID टोकन से शुरू किया जाता है, तो यह क्लाइंट-साइड रेंडरिंग (सीएसआर) और सर्वर-साइड रेंडरिंग (एसएसआर) एनवायरमेंट के बीच, पुष्टि किए गए उपयोगकर्ता सेशन को ब्रिज करने की सुविधा चालू करता है. FirebaseServerApp ऑब्जेक्ट के साथ शुरू किए गए Firebase Auth SDK टूल के इंस्टेंस में, Auth ID टोकन मौजूद होता है. यह इंस्टेंस शुरू होने पर, उपयोगकर्ता को साइन इन करने की कोशिश करेगा. इसके लिए, ऐप्लिकेशन को साइन इन करने के किसी भी तरीके को लागू करने की ज़रूरत नहीं होगी.

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

Firebase Auth सेवा वर्कर को लागू करने के बारे में जानने के लिए, सेवा वर्कर की मदद से सेशन मैनेजमेंट देखें. FirebaseServerApp को शुरू करने के लिए, हेडर से इन टोकन को पार्स करने का तरीका बताने वाले कोड के लिए, सर्वर साइड में हुए बदलाव भी देखें.