Jeśli pracujesz z pakietem Firebase JS SDK lub innymi pakietami Firebase SDK dla klientów, prawdopodobnie znasz interfejs FirebaseApp
i wiesz, jak go używać do konfigurowania instancji aplikacji. Aby ułatwić podobne operacje po stronie serwera, Firebase udostępnia FirebaseServerApp
.
FirebaseServerApp
to wariant FirebaseApp
do użycia w środowiskach renderowania po stronie serwera (SSR). Zawiera narzędzia do kontynuowania sesji Firebase, które obejmują renderowanie po stronie klienta (CSR) i renderowanie po stronie serwera. Te narzędzia i strategie mogą pomóc w ulepszaniu dynamicznych aplikacji internetowych utworzonych za pomocą Firebase i wdrożonych w środowiskach Google, takich jak Firebase App Hosting.
Korzystaj z FirebaseServerApp
, aby:
- wykonywać kod po stronie serwera w kontekście użytkownika, w przeciwieństwie do pakietu Firebase Admin SDK, który ma pełne uprawnienia administracyjne;
- Włącz korzystanie ze Sprawdzania aplikacji w środowiskach SSR.
- Kontynuowanie sesji uwierzytelniania Firebase utworzonej na kliencie.
Cykl życia FirebaseServerApp
Frameworki renderowania po stronie serwera (SSR) i inne środowiska wykonawcze inne niż przeglądarki, takie jak usługi w chmurze, optymalizują czas inicjowania przez ponowne wykorzystywanie zasobów w wielu wykonaniach. FirebaseServerApp
jest przeznaczona do obsługi tych środowisk dzięki zastosowaniu mechanizmu liczby referencyjnej. Jeśli aplikacja wywoła funkcję
initializeServerApp
z tymi samymi parametrami co poprzednia funkcja
initializeServerApp
, otrzyma tę samą instancję FirebaseServerApp
, która została już zainicjowana. Pozwala to ograniczyć niepotrzebne obciążenie związane z inicjowaniem i alokacją pamięci. Gdy funkcja deleteApp
jest wywoływana w przypadku instancji FirebaseServerApp
, zmniejsza liczbę odwołań, a instancja jest zwalniana po osiągnięciu przez liczbę odwołań zera.
Czyszczenie instancji FirebaseServerApp
Trudno jest określić, kiedy wywołać deleteApp
na instancji FirebaseServerApp
, zwłaszcza jeśli równolegle wykonujesz wiele operacji asynchronicznych. Ułatwia to pole releaseOnDeref
w FirebaseServerAppSettings
. Jeśli przypiszesz releaseOnDeref
odwołanie do obiektu o czasie życia w zakresie żądania (np. do obiektu nagłówków żądania SSR), FirebaseServerApp
zmniejszy liczbę odwołań, gdy platforma odzyska obiekt nagłówków. Spowoduje to automatyczne wyczyszczenie instancji FirebaseServerApp
.
Oto przykład użycia właściwości 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);
...
}
Wznawianie uwierzytelnionych sesji utworzonych na kliencie
Gdy instancja FirebaseServerApp
jest inicjowana za pomocą tokena identyfikatora uwierzytelniania, umożliwia to połączenie uwierzytelnionych sesji użytkownika między środowiskami renderowania po stronie klienta (CSR) i renderowania po stronie serwera (SSR). Instancje pakietu SDK Uwierzytelnianie Firebase zainicjowane za pomocą obiektu FirebaseServerApp
zawierającego token identyfikatora uwierzytelniania będą próbować zalogować użytkownika podczas inicjowania bez konieczności wywoływania przez aplikację jakichkolwiek metod logowania.
Podanie tokena identyfikatora uwierzytelniania umożliwia aplikacjom korzystanie z dowolnych metod logowania Auth po stronie klienta, co zapewnia kontynuowanie sesji po stronie serwera, nawet w przypadku metod logowania wymagających interakcji użytkownika. Umożliwia też przeniesienie na serwer operacji wymagających dużej mocy obliczeniowej, takich jak uwierzytelnione zapytania do Firestore, co powinno poprawić wydajność renderowania aplikacji.
/// 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.
Używanie usługi App Check w środowiskach SSR
Wymuszanie Sprawdzania aplikacji opiera się na instancji pakietu SDK Sprawdzania aplikacji, z której korzystają pakiety SDK Firebase, aby wewnętrznie wywoływać getToken
. Wynikowy token jest następnie dołączany do żądań wysyłanych do wszystkich usług Firebase, co umożliwia backendowi weryfikację aplikacji.
Pakiet SDK App Check potrzebuje jednak przeglądarki, aby uzyskać dostęp do określonych heurystyk na potrzeby weryfikacji aplikacji, więc nie można go zainicjować w środowiskach serwerowych.
FirebaseServerApp
podaje alternatywę. Jeśli podczas FirebaseServerApp
inicjowaniaFirebaseServerApp
zostanie podany token Sprawdzania aplikacji wygenerowany przez klienta, będzie on używany przez pakiety SDK usług Firebase podczas wywoływania usług Firebase, co eliminuje potrzebę instancji pakietu SDK Sprawdzania aplikacji.
/// 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.
Przekazywanie tokenów klienta do fazy renderowania po stronie serwera
Aby przesyłać uwierzytelnione tokeny identyfikatora uwierzytelniania (i tokeny App Check) z klienta do fazy renderowania po stronie serwera (SSR), użyj procesu roboczego usługi. To podejście polega na przechwytywaniu żądań pobierania, które wywołują SSR, i dołączaniu tokenów do nagłówków żądań.
Więcej informacji o implementacji usługi Service Worker w usłudze Firebase Authentication znajdziesz w artykule Zarządzanie sesjami za pomocą mechanizmów Service Worker. Zobacz też Zmiany po stronie serwera, gdzie znajdziesz kod pokazujący, jak analizować te tokeny z nagłówków do użycia podczas inicjowania FirebaseServerApp
.