A Firebase Admin SDK for Dart

  Admin, Dart, Dashboard

Dart Firebase Admin

Welcome! This project is a port of Node’s Firebase Admin SDK to Dart.

⚠️ This project is still in its early stages, and some features may be missing or bugged. Currently, only Firestore is available, with more to come (auth next).

  • Dart Firebase Admin
  • Available features
  • Usage
    • Connecting to the SDK
      • Connecting using the environment
      • Connecting using a service-account.json file
    • Using Firestore
    • Using Auth

Available features

Firestore
reference.id
reference.parent
reference.path
reference.==
reference.withConverter
collection.listDocuments
collection.add
collection.get
collection.create
collection.delete
collection.set
collection.update
collection.collection
query.where(‘field’, operator, value)
query.where(‘field.path’, operator, value)
query.where(FieldPath(‘…’), operator, value)
query.whereFilter(Filter.and(a, b))
query.whereFilter(Filter.or(a, b))
query.startAt
query.startAtDocument
query.startAfter
query.startAfterDocument
query.endAt
query.endAtDocument
query.endAfter
query.endAfterDocument
query.onSnapshot
query.select
query.orderBy
query.limit
query.limitToLast
query.offset
querySnapshot.docs
querySnapshot.readTime
querySnapshot.docsChange ⚠️
documentSnapshots.data
documentSnapshots.readTime/createTime/updateTime
documentSnapshots.id
documentSnapshots.exists
documentSnapshots.data
documentSnapshots.get(fieldPath)
FieldValue.documentId
FieldValue.increment
FieldValue.arrayUnion
FieldValue.arrayRemove
FieldValue.delete
FieldValue.serverTimestamp
collectionGroup
runTransaction
GeoPoint
Timestamp
BundleBuilder
Auth
auth.tenantManager
auth.projectConfigManager
auth.generatePasswordResetLink
auth.generateEmailVerificationLink
auth.generateVerifyAndChangeEmailLink
auth.generateSignInWithEmailLink
auth.listProviderConfigs
auth.createProviderConfig
auth.updateProviderConfig
auth.getProviderConfig
auth.deleteProviderConfig
auth.createCustomToken
auth.setCustomUserClaims
auth.verifyIdToken
auth.revokeRefreshTokens
auth.createSessionCookie
auth.verifySessionCookie
auth.importUsers
auth.listUsers
auth.deleteUser
auth.deleteUsers
auth.getUser
auth.getUserByPhoneNumber
auth.getUserByEmail
auth.getUserByProviderUid
auth.getUsers
auth.createUser
auth.updateUser

Usage

Connecting to the SDK

Before using Firebase, we must first authenticate.

There are currently two options:

  • You can connect using environment variables
  • Alternatively, you can specify a service-account.json file

Connecting using the environment

To connect using environment variables, you will need to have the Firebase CLI installed.

Once done, you can run:

firebase login

And log-in to the project of your choice.

From there, you can have your Dart program authenticate using the environment with:

import 'package:dart_firebase_admin/dart_firebase_admin.dart';

void main() {
  final admin = FirebaseAdminApp.initializeApp(
    '<your project name>',
    // This will obtain authentication information from the environment
    Credential.fromApplicationDefaultCredentials(),
  );

  // TODO use the Admin SDK
  final firestore = Firestore(admin);
  firestore.doc('hello/world').get();
}

Connecting using a service-account.json file

Alternatively, you can choose to use a service-account.json file.
This file can be obtained in your firebase console by going to:

https://console.firebase.google.com/u/0/project/<your-project-name>/settings/serviceaccounts/adminsdk

Make sure to replace <your-project-name> with the name of your project. One there, follow the steps and download the file. Place it anywhere you want in your project.

⚠️ Note: This file should be kept private. Do not commit it on public repositories.

After all of that is done, you can now authenticate in your Dart program using:

import 'package:dart_firebase_admin/dart_firebase_admin.dart';

void main() {
  final admin = FirebaseAdminApp.initializeApp(
    '<your project name>',
    // Log-in using the newly downloaded file.
    Credential.fromServiceAccount(
      File('<path to your service-account.json file>'),
    ),
  );

  // TODO use the Admin SDK
  final firestore = Firestore(admin);
  firestore.doc('hello/world').get();
}

Using Firestore

First, make sure to follow the steps on how to authenticate. You should now have an instance of a FirebaseAdminApp object.

You can now use this object to create a Firestore object as followed:

// Obtained in the previous steps
FirebaseAdminApp admin;
final firestore = Firestore(admin);

From this point onwards, using Firestore with the admin ADK is roughly equivalent to using FlutterFire.

Using this Firestore object, you’ll find your usual collection/query/document objects.

For example, you can perform a where query:

// The following lists all users above 18 years old
final collection = firestore.collection('users');
final adults = collection.where('age', WhereFilter.greaterThan, 18);

final adultsSnapshot = await adults.get();

for (final adult in adultsSnapshot.docs) {
  print(adult.data()['age']);
}

Composite queries are also supported:

// List users with either John or Jack as first name.
firestore
  .collection('users')
  .whereFilter(
    Filter.or([
      Filter.where('firstName', WhereFilter.equal, 'John'),
      Filter.where('firstName', WhereFilter.equal, 'Jack'),
    ]),
  );

Alternatively, you can fetch a specific document too:

// Print the age of the user with ID "123"
final user = await firestore.doc('users/123').get();
print(user.data()?['age']);

Using Auth

First, make sure to follow the steps on how to authenticate. You should now have an instance of a FirebaseAdminApp object.

You can now use this object to create a FirebaseAuth object as followed:

// Obtained in the previous steps
FirebaseAdminApp admin;
final auth = FirebaseAuth(admin);

You can then use this FirebaseAuth object to perform various auth operations. For example, you can generate a password reset link:

final link = await auth.generatePasswordResetLink(
  'hello@example.com',
);

Download and/or contribute to this SDK source code on GitHub