Skip to main content
Version: 3.3.0

Admin Operations

The Firebase identity provider provides admin operations through FirebaseIdpAdmin for managing Firebase-authenticated accounts. These operations are useful for administrative tasks and account management.

Accessing the FirebaseIdpAdmin​

You can access the admin operations through the AuthServices.instance.firebaseIdp property:

import 'package:serverpod_auth_idp_server/providers/firebase.dart';
import 'package:serverpod_auth_idp_server/core.dart';

// Get the FirebaseIdp instance
final firebaseIdp = AuthServices.instance.firebaseIdp;

// Access admin operations
final admin = firebaseIdp.admin;

Account Management​

The admin API provides methods for managing Firebase-authenticated accounts.

Finding Accounts​

// Find an account by email
final account = await admin.findAccountByEmail(
session,
email: 'user@example.com',
);

// Find an account by Serverpod auth user ID
final account = await admin.findAccountByAuthUserId(
session,
authUserId: authUserId,
);

// Find the Serverpod user ID by Firebase UID
final userId = await admin.findUserByFirebaseUserId(
session,
userIdentifier: 'firebase-uid',
);

Linking Firebase Authentication​

Link an existing Serverpod user to a Firebase account:

// Link a Firebase account to an existing user
final firebaseAccount = await admin.linkFirebaseAuthentication(
session,
authUserId: authUserId,
accountDetails: accountDetails,
);

The accountDetails parameter is a FirebaseAccountDetails record containing the Firebase user information. You can obtain this from a Firebase ID token using the fetchAccountDetails method:

// Fetch account details from a Firebase ID token
final accountDetails = await admin.fetchAccountDetails(
session,
idToken: firebaseIdToken,
);

// Then link the account
await admin.linkFirebaseAuthentication(
session,
authUserId: existingUserId,
accountDetails: accountDetails,
);

Deleting Accounts​

// Delete a Firebase account by Firebase UID
final deletedAccount = await admin.deleteFirebaseAccount(
session,
userIdentifier: 'firebase-uid',
);

// Delete all Firebase accounts for a Serverpod user
final deletedAccount = await admin.deleteFirebaseAccountByAuthUserId(
session,
authUserId: authUserId,
);
info

Deleting a Firebase account only removes the link between the Firebase authentication and the Serverpod user. It does not delete the user from your Serverpod database or from Firebase itself.

FirebaseIdpUtils​

The FirebaseIdpUtils class provides utility functions for working with Firebase authentication:

final utils = firebaseIdp.utils;

// Authenticate a user with a Firebase ID token
// This creates the account if it doesn't exist
final authSuccess = await utils.authenticate(
session,
idToken: firebaseIdToken,
transaction: transaction, // optional
);
warning

Admin operations should only be called from secure server-side code. Do not expose these methods directly through client endpoints without proper authorization checks.