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

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

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

FirebaseServerApp का इस्तेमाल इन कामों के लिए किया जा सकता है:

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

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

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

FirebaseServerApp इंस्टेंस मिटाना

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

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 ID टोकन (और ऐप्लिकेशन की जांच करने वाले टोकन) ट्रांसमिट करने के लिए, सर्विस वर्कर का इस्तेमाल करें. इस तरीके में, SSR को ट्रिगर करने वाले फ़ेच अनुरोधों को इंटरसेप्ट करना और अनुरोध के हेडर में टोकन जोड़ना शामिल है.

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