将 Admin SDK 与 Data Connect 搭配使用

Firebase Admin SDK 是一组服务器库,让您可以从特权环境与 Firebase 进行交互,以执行以下操作:对 Firebase Data Connect 服务执行查询和更改,以便使用提升的权限进行批量数据管理和其他操作。

Admin SDK 为您提供了一个 API,可用于在读写模式和只读模式下调用操作。对于只读操作,您具有 安心地实施无法修改数据的管理功能 数据。

Admin SDK 设置

如需开始在服务器上使用 Firebase Data Connect,您首先需要为 Node.js 安装并设置 Admin SDK

在脚本中初始化 Admin SDK

如需初始化 SDK,请导入 Data Connect 扩展程序并 声明您的项目服务 ID 和位置。


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'
});

设计与 Admin SDK 搭配使用的查询和变更

Admin SDK 对于测试 Data Connect 操作很有用,因为 以下注意事项。

了解 SDK 和 @auth(level: NO_ACCESS) 操作指令

由于 Admin SDK 以特权运行,因此它可以执行您的任何 查询和变更,而不考虑使用 @auth 指令(包括 NO_ACCESS 级别)设置的访问权限级别。

如果您在客户端操作之外,还在 .gql 源文件中整理了管理查询和更改,以便导入到管理脚本中,Firebase 建议您将管理操作标记为无任何授权访问级别,或者更明确地将其设为 NO_ACCESS。无论是哪种方式,这都会阻止从客户端或其他非特权上下文执行此类操作。

将 SDK 与 Data Connect 模拟器搭配使用

在原型和测试环境中,对本地数据执行数据种子和其他操作会很有用。Admin SDK可帮助您简化 工作流,因为它会忽略本地流的身份验证和授权。

Firebase Admin SDK 会自动连接到 Data Connect 模拟器:DATA_CONNECT_EMULATOR_HOST

export DATA_CONNECT_EMULATOR_HOST="127.0.0.1:8080"

如需了解详情,请参阅以下主题:

实现常见使用场景

Admin SDK 旨在用于对您的关键数据执行特权操作。

Data Connect 的 API 由可读写的 executeGraphql 组成, 接口和一个只读 executeGraphqlRead 接口。

管理用户数据

Admin SDK 的一个典型用例是管理用户数据。

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

export interface UserVariables {
  id: string;
}

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

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

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

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

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

后续步骤