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:
- Przewodnik po zasiewie danych w ramach lokalnego rozwoju
- dokumentacja emulatora Data Connect,
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?
- Zapoznaj się z interfejsem API usługi Admin SDK.
- Do innych operacji związanych z zarządzaniem projektem, takich jak zarządzanie schematami i złączami oraz zarządzanie usługami i bazami danych, używaj interfejsu wiersza poleceń Firebase i konsoli Google Cloud.