Używanie pakietu Admin SDK z usługą Data Connect

Firebase Admin SDK to zestaw bibliotek serwera, który umożliwia interakcję z Firebase z przywilejowanych środowisk, aby wykonywać takie działania jak wykonywanie zapytań i mutacji w usłudze Firebase Data Connect na potrzeby zbiorczego zarządzania danymi i innych operacji z podwyższonymi uprawnieniami oraz z użyciem danych logowania w imieniu innej osoby.

Usługa Admin SDK udostępnia interfejs API do wywoływania operacji w trybie odczytu/zapisu i tylko do odczytu. Dzięki operacjom tylko do odczytu możesz mieć pewność, że funkcje administracyjne nie mogą modyfikować danych w Twoich bazach danych.

Konfiguracja pakietu Admin SDK

Aby zacząć korzystać z Firebase Data Connect na serwerze, musisz najpierw zainstalować i skonfigurować Admin SDK w Node.js.

Inicjowanie pakietu Admin SDK w skryptach

Aby zainicjować pakiet SDK, zaimportuj rozszerzenia Data Connect i ogłoś identyfikator usługi oraz lokalizację projektu.


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

projektowanie zapytań i mutacji do użycia z usługą Admin SDK,

Funkcja Admin SDK jest przydatna do testowania operacji Data Connect, biorąc pod uwagę te kwestie.

Informacje o pakiecie SDK i instrukcji operacji @auth(level: NO_ACCESS)

Ponieważ Admin SDK działa z uprawnieniami, może wykonywać dowolne zapytania i mutacje niezależnie od poziomów dostępu ustawionych za pomocą dyrektyw @auth, w tym na poziomie NO_ACCESS.

Jeśli oprócz operacji na kliencie organizujesz zapytania administracyjne i mutacje w plikach źródłowych .gql na potrzeby importowania do skryptów administracyjnych, Firebase zaleca oznaczenie operacji administracyjnych bez żadnego poziomu dostępu autoryzacji lub bardziej jednoznaczne ich oznaczenie jako NO_ACCESS. W obu przypadkach zapobiega to wykonywaniu takich operacji przez klientów lub w innych kontekstach bez uprawnień.

Korzystanie z pakietu SDK w emulatorze Data Connect

W środowiskach prototypów i testów może być przydatne wykonanie zasiewu danych i innych operacji na danych lokalnych. Flaga Admin SDK pozwala uprościć przepływy pracy, ponieważ ignoruje uwierzytelnianie i autoryzację w przypadku procesów lokalnych.

Pakiety SDK Firebase Admin automatycznie łączą się z emulatorem Data Connect, gdy ustawiona jest zmienna środowiskowa DATA_CONNECT_EMULATOR_HOST:

export DATA_CONNECT_EMULATOR_HOST="127.0.0.1:9399"

Aby dowiedzieć się więcej, zobacz:

Wdrażanie typowych przypadków użycia

Usługa Admin SDK jest przeznaczona do operacji uprzywilejowanych dotyczących Twoich danych krytycznych.

Interfejs API usługi Data Connect składa się z interfejsu executeGraphql do odczytu i zapisu oraz interfejsu executeGraphqlRead tylko do odczytu.

Zarządzanie danymi użytkowników

Typowym zastosowaniem Admin SDK jest zarządzanie danymi użytkowników.

Używanie danych logowania administratora

Najprostszym sposobem jest uzyskanie dostępu do danych użytkownika za pomocą danych logowania administratora.

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

Odgrywanie roli innego użytkownika

Są też przypadki, w których chcesz, aby skrypty modyfikowały dane użytkownika na podstawie ograniczonych danych logowania w imieniu konkretnego użytkownika. Takie podejście jest zgodne z zasadą jak najmniejszych uprawnień.

Aby korzystać z tego interfejsu, musisz zebrać informacje z niestandardowego tokena uwierzytelniającego JWT, który jest zgodny z formatem tokena Authentication. Zapoznaj się też z przewodnikiem dotyczącym tokenów niestandardowych.

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

Zarządzanie danymi publicznymi

Za pomocą pakietu SDK możesz pracować z publicznie dostępnymi danymi, podszywając się pod niezalogowanego użytkownika.

// 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);

Co dalej?