Sử dụng SDK dành cho quản trị viên với tính năng Kết nối dữ liệu

Firebase Admin SDK là một tập hợp các thư viện máy chủ cho phép bạn tương tác với Firebase từ các môi trường đặc quyền để thực hiện các thao tác như thực hiện truy vấn và đột biến trên dịch vụ Firebase Data Connect để quản lý dữ liệu hàng loạt và các thao tác khác với đặc quyền nâng cao và thông tin xác thực được mạo danh.

Admin SDK cung cấp cho bạn một API để gọi các thao tác ở cả chế độ đọc/ghi và chế độ chỉ có thể đọc. Với các thao tác chỉ đọc, bạn có thể yên tâm triển khai các chức năng quản trị không thể sửa đổi dữ liệu trong cơ sở dữ liệu.

Thiết lập SDK dành cho quản trị viên

Để bắt đầu sử dụng Firebase Data Connect trên máy chủ, trước tiên, bạn cần cài đặt và thiết lập Admin SDK cho Node.js.

Khởi chạy SDK quản trị trong tập lệnh

Để khởi chạy SDK, hãy nhập các tiện ích Data Connect và khai báo mã dịch vụ dự án cũng như vị trí của bạn.


import { initializeApp } from 'firebase-admin/app';
import { getDataConnect } from 'firebase-admin/data-connect';

// If you'd like to use OAuth2 flows and other credentials to log in,
// visit https://firebase.google.com/docs/admin/setup#initialize-sdk
// for alternative ways to initialize the SDK.

const app = initializeApp();

const dataConnect = getDataConnect({
    serviceId: 'serviceId',
    location: 'us-west2'
});

Thiết kế truy vấn và đột biến để sử dụng với Admin SDK

Admin SDK rất hữu ích để kiểm thử các thao tác Data Connect, với các cân nhắc sau.

Tìm hiểu về SDK và lệnh thao tác @auth(level: NO_ACCESS)

Admin SDK hoạt động với các đặc quyền, nên nó có thể thực thi bất kỳ truy vấn và đột biến nào của bạn, bất kể cấp truy cập được đặt bằng các lệnh @auth, bao gồm cả cấp NO_ACCESS.

Nếu cùng với các hoạt động của ứng dụng, bạn sắp xếp các truy vấn quản trị và đột biến trong tệp nguồn .gql để nhập vào tập lệnh quản trị, thì Firebase khuyên bạn nên đánh dấu các hoạt động quản trị mà không có cấp truy cập uỷ quyền nào, hoặc có thể rõ ràng hơn và đặt các hoạt động đó thành NO_ACCESS. Dù bằng cách nào, việc này cũng ngăn các thao tác như vậy được thực thi từ ứng dụng hoặc trong các ngữ cảnh không đặc quyền khác.

Sử dụng SDK với trình mô phỏng Data Connect

Trong môi trường thử nghiệm và nguyên mẫu, bạn có thể thực hiện việc tạo dữ liệu và các thao tác khác trên dữ liệu cục bộ. Admin SDK cho phép bạn đơn giản hoá quy trình làm việc vì lớp này bỏ qua việc xác thực và uỷ quyền cho các luồng cục bộ.

SDK quản trị Firebase tự động kết nối với trình mô phỏng Data Connect khi bạn đặt biến môi trường DATA_CONNECT_EMULATOR_HOST:

export DATA_CONNECT_EMULATOR_HOST="127.0.0.1:9399"

Để biết thêm thông tin, hãy xem các bài viết sau:

Triển khai các trường hợp sử dụng phổ biến

Admin SDK được cung cấp cho các thao tác đặc quyền trên dữ liệu quan trọng của bạn.

API cho Data Connect bao gồm giao diện executeGraphql đọc-ghi và giao diện executeGraphqlRead chỉ có thể đọc.

Quản lý dữ liệu người dùng

Một trường hợp sử dụng thông thường của Admin SDK là quản lý dữ liệu người dùng.

Sử dụng thông tin đăng nhập quản trị

Cách đơn giản nhất là truy cập vào dữ liệu người dùng bằng thông tin xác thực của quản trị viên.

// User can be publicly accessible, or restricted to admins
const query = "query getProfile(id: AuthID) { user(id: $id) { id name } }";

interface UserData {
  user: {
    id: string;
    name: string;
  };
}

export interface UserVariables {
  id: string;
}

const options:GraphqlOptions<UserVariables> = { variables: { id: "QVBJcy5ndXJ1" } };

// executeGraphql
const gqlResponse = await dataConnect.executeGraphql<UserData, UserVariables>(query, options);

// executeGraphqlRead (similar to previous sample but only for read operations)
const gqlResponse = await dataConnect.executeGraphqlRead<UserData, UserVariables>(query, options);

// gqlResponse -> { "data": { "user": { "id": "QVBJcy5ndXJ1", "name": "Fred" } } }

Nhập vai thông tin đăng nhập của người dùng

Ngoài ra, cũng có các trường hợp sử dụng mà bạn muốn tập lệnh sửa đổi dữ liệu người dùng dựa trên thông tin xác thực có giới hạn, thay mặt cho một người dùng cụ thể. Phương pháp này tuân thủ nguyên tắc về đặc quyền tối thiểu.

Để sử dụng giao diện này, hãy thu thập thông tin từ mã thông báo xác thực JWT tuỳ chỉnh tuân theo định dạng mã thông báo Authentication. Ngoài ra, hãy xem hướng dẫn về mã thông báo tuỳ chỉnh.

// Get the current user's data
const queryGetUserImpersonation = `
    query getUser @auth(level: USER) {
        user(key: {uid_expr: "auth.uid"}) {
            id,
            name
        }
    }`;

// Impersonate a user with the specified auth claims
const optionsAuthenticated: GraphqlOptions<undefined> = {
    impersonate: {
        authClaims: {
            sub: 'QVBJcy5ndXJ1'
        }
    }
};

// executeGraphql with impersonated authenticated user scope
const gqlResponse = await dataConnect.executeGraphql<UserData, undefined>(queryGetUserImpersonation, optionsAuthenticated);

// gqlResponse -> { "data": { "user": { "id": "QVBJcy5ndXJ1", "name": "Fred" } } }

Quản lý dữ liệu công khai

Bạn có thể làm việc với dữ liệu có thể truy cập công khai bằng cách sử dụng SDK, mạo danh một người dùng chưa được xác thực.

// Query to get posts, with authentication level PUBLIC
const queryGetPostsImpersonation = `
    query getPosts @auth(level: PUBLIC) {
        posts {
          description
        }
    }`;

// Attempt to access data as an unauthenticated user
const optionsUnauthenticated: GraphqlOptions<undefined> = {
    impersonate: {
        unauthenticated: true
    }
};

// executeGraphql with impersonated unauthenticated user scope
const gqlResponse = await dataConnect.executeGraphql<UserData, undefined>(queryGetPostsImpersonation, optionsUnauthenticated);

Tiếp theo là gì?