Data Connect와 함께 Admin SDK 사용

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는 권한으로 작동하므로 NO_ACCESS 수준을 비롯하여 @auth 디렉티브를 사용하여 설정된 액세스 수준과 관계없이 모든 쿼리와 변형을 실행할 수 있습니다.

클라이언트 작업과 함께 관리 스크립트로 가져오기 위해 .gql 소스 파일에서 관리 쿼리 및 변형을 구성하는 경우 Firebase에서는 승인 액세스 수준 없이 관리 작업을 표시하거나 더 명시적으로 NO_ACCESS로 설정하는 것이 좋습니다. 어느 쪽이든 이러한 작업이 클라이언트 또는 기타 권한이 없는 컨텍스트에서 실행되지 않습니다.

Data Connect 에뮬레이터에서 SDK 사용

프로토타입 및 테스트 환경에서는 로컬 데이터에 데이터 시드 및 기타 작업을 실행하는 것이 유용할 수 있습니다. Admin SDK는 로컬 흐름에 대한 인증 및 승인을 무시하므로 워크플로를 간소화할 수 있습니다.

DATA_CONNECT_EMULATOR_HOST 환경 변수가 설정되면 Firebase Admin SDK가 자동으로 Data Connect 에뮬레이터에 연결됩니다.

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" } } }

다음 단계