Nếu đã làm việc với SDK Firebase JS hoặc các SDK ứng dụng Firebase khác, bạn có thể quen thuộc với giao diện FirebaseApp
và cách sử dụng giao diện này để định cấu hình các thực thể ứng dụng. Để hỗ trợ các thao tác tương tự ở phía máy chủ, Firebase cung cấp FirebaseServerApp
.
FirebaseServerApp
là một biến thể của FirebaseApp
để sử dụng trong môi trường kết xuất phía máy chủ (SSR). Công cụ này bao gồm các công cụ để tiếp tục các phiên Firebase trên nhiều nền tảng kết xuất phía máy khách (CSR) / kết xuất phía máy chủ. Các công cụ và chiến lược này có thể giúp nâng cao ứng dụng web động được tạo bằng Firebase và triển khai trong các môi trường của Google như Firebase App Hosting.
Sử dụng FirebaseServerApp
để:
- Thực thi mã phía máy chủ trong ngữ cảnh người dùng, trái ngược với SDK Quản trị Firebase có toàn quyền quản trị.
- Bật tính năng Kiểm tra ứng dụng trong môi trường SSR.
- Tiếp tục phiên Xác thực Firebase đã tạo trong ứng dụng.
Vòng đời của FirebaseServerApp
Các khung kết xuất phía máy chủ (SSR) và các môi trường thời gian chạy không phải trình duyệt khác như trình chạy trên đám mây tối ưu hoá thời gian khởi chạy bằng cách sử dụng lại tài nguyên trên nhiều lần thực thi. FirebaseServerApp
được thiết kế để phù hợp với các môi trường này bằng cách sử dụng cơ chế đếm tham chiếu. Nếu một ứng dụng gọi initializeServerApp
bằng các tham số giống với initializeServerApp
trước đó, thì ứng dụng đó sẽ nhận được cùng một thực thể FirebaseServerApp
đã được khởi tạo. Điều này giúp giảm chi phí khởi tạo và phân bổ bộ nhớ không cần thiết. Khi deleteApp
được gọi trên một thực thể FirebaseServerApp
, thực thể này sẽ giảm số lượt tham chiếu và được giải phóng sau khi số lượt tham chiếu đạt đến 0.
Dọn dẹp các thực thể FirebaseServerApp
Bạn có thể gặp khó khăn khi biết thời điểm gọi deleteApp
trên một thực thể FirebaseServerApp
, đặc biệt là nếu bạn đang chạy nhiều thao tác không đồng bộ song song. Trường releaseOnDeref
của FirebaseServerAppSettings
giúp đơn giản hoá việc này. Nếu bạn chỉ định releaseOnDeref
tham chiếu đến một đối tượng có thời gian tồn tại của phạm vi yêu cầu (ví dụ: đối tượng tiêu đề của yêu cầu SSR), thì FirebaseServerApp
sẽ giảm số lượt tham chiếu khi khung lấy lại đối tượng tiêu đề. Thao tác này sẽ tự động dọn dẹp thực thể FirebaseServerApp
.
Sau đây là ví dụ về cách sử dụng 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);
...
}
Tiếp tục các phiên đã xác thực được tạo trên ứng dụng
Khi một thực thể của FirebaseServerApp
được khởi tạo bằng mã thông báo Auth ID, thực thể này sẽ cho phép kết nối các phiên người dùng đã xác thực giữa môi trường kết xuất phía máy khách (CSR) và môi trường kết xuất phía máy chủ (SSR). Các thực thể của SDK Xác thực Firebase được khởi chạy bằng đối tượng FirebaseServerApp
chứa mã thông báo Auth ID sẽ cố gắng đăng nhập người dùng khi khởi chạy mà không cần ứng dụng gọi bất kỳ phương thức đăng nhập nào.
Việc cung cấp mã thông báo mã nhận dạng Auth cho phép ứng dụng sử dụng bất kỳ phương thức đăng nhập nào của Auth trên ứng dụng, đảm bảo rằng phiên tiếp tục ở phía máy chủ, ngay cả đối với các phương thức đăng nhập yêu cầu người dùng tương tác. Ngoài ra, tính năng này cho phép chuyển các hoạt động chuyên sâu sang máy chủ, chẳng hạn như các truy vấn Firestore đã xác thực, giúp cải thiện hiệu suất kết xuất của ứng dụng.
/// 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.
Sử dụng tính năng Kiểm tra ứng dụng trong môi trường SSR
Việc thực thi tính năng Kiểm tra ứng dụng dựa vào một thực thể SDK Kiểm tra ứng dụng mà các SDK Firebase sử dụng để gọi getToken
trong nội bộ. Sau đó, mã thông báo thu được sẽ được đưa vào các yêu cầu cho tất cả dịch vụ Firebase, cho phép phần phụ trợ xác thực ứng dụng.
Tuy nhiên, vì SDK Kiểm tra ứng dụng cần một trình duyệt để truy cập vào các phương pháp phỏng đoán cụ thể cho việc xác thực ứng dụng, nên không thể khởi chạy SDK này trong môi trường máy chủ.
FirebaseServerApp
cung cấp một giải pháp thay thế. Nếu mã thông báo Kiểm tra ứng dụng do ứng dụng tạo được cung cấp trong quá trình khởi chạy FirebaseServerApp
, thì mã thông báo này sẽ được các SDK sản phẩm Firebase sử dụng khi gọi các dịch vụ Firebase, nhờ đó, bạn không cần phải tạo một thực thể SDK Kiểm tra ứng dụng.
/// 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.
Truyền mã thông báo ứng dụng đến giai đoạn kết xuất phía máy chủ
Để truyền mã thông báo Auth ID (và mã thông báo App Check) đã xác thực từ ứng dụng khách đến giai đoạn kết xuất phía máy chủ (SSR), hãy sử dụng trình chạy dịch vụ. Phương pháp này bao gồm việc chặn các yêu cầu tìm nạp kích hoạt SSR và thêm mã thông báo vào tiêu đề yêu cầu.
Hãy tham khảo phần Quản lý phiên bằng trình chạy dịch vụ để biết cách triển khai tham chiếu của trình chạy dịch vụ Firebase Auth. Ngoài ra, hãy xem phần Thay đổi phía máy chủ để biết mã minh hoạ cách phân tích cú pháp các mã thông báo này từ tiêu đề để sử dụng trong quá trình khởi tạo FirebaseServerApp
.