Bird
Raised Fist0
Firebasecloud~7 mins

Authentication trigger functions in Firebase - Commands & Configuration

Choose your learning style10 modes available
Introduction
Authentication trigger functions run automatically when users sign up or log in. They help you react to these events, like sending welcome messages or updating user data.
When you want to send a welcome email right after a user creates an account.
When you need to log user sign-in times for analytics.
When you want to update user profiles in your database after they sign up.
When you want to block or flag suspicious sign-ins automatically.
When you want to customize user experience based on their login events.
Config File - index.js
index.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

// Triggered when a user signs up
exports.onUserCreate = functions.auth.user().onCreate((user) => {
  console.log('New user created:', user.uid);
  // Example: Add user data to Firestore
  return admin.firestore().collection('users').doc(user.uid).set({
    email: user.email,
    createdAt: admin.firestore.FieldValue.serverTimestamp()
  });
});

// Triggered when a user deletes their account
exports.onUserDelete = functions.auth.user().onDelete((user) => {
  console.log('User deleted:', user.uid);
  // Example: Remove user data from Firestore
  return admin.firestore().collection('users').doc(user.uid).delete();
});

This file defines two Firebase Authentication trigger functions.

  • onUserCreate: Runs when a new user signs up. It logs the user ID and saves user info in Firestore.
  • onUserDelete: Runs when a user deletes their account. It logs the user ID and removes their data from Firestore.

This setup helps keep your database in sync with user authentication events.

Commands
Deploys the authentication trigger functions to Firebase so they run automatically on user events.
Terminal
firebase deploy --only functions
Expected OutputExpected
=== Deploying to 'your-project-id'... i deploying functions Running command: npm --prefix "$RESOURCE_DIR" run lint > functions@ lint /workspace/functions > eslint . ✔ functions: Finished running lint. ✔ functions: Using node@16 ✔ functions: Finished deployment. Project Console: https://console.firebase.google.com/project/your-project-id/overview ✔ Deploy complete!
→
--only - Deploy only the specified Firebase feature, here 'functions' to avoid deploying other resources.
Shows logs from your deployed functions to verify they run correctly when triggered.
Terminal
firebase functions:log
Expected OutputExpected
2024-06-01T12:00:00.000Z onUserCreate: New user created: abc123def456 2024-06-01T12:05:00.000Z onUserDelete: User deleted: abc123def456
Imports users into Firebase Authentication, which can trigger the onUserCreate function if new users are added.
Terminal
firebase auth:import users.json --hash-algo=SCRYPT --hash-key=base64encodedkey
Expected OutputExpected
Importing users... Successfully imported 3 users.
→
--hash-algo - Specifies the password hashing algorithm used in the import file.
→
--hash-key - Provides the key used for password hashing in base64 format.
Key Concept

If you remember nothing else from this pattern, remember: authentication trigger functions run automatically on user sign-up or deletion to keep your app data updated.

Common Mistakes
Not initializing the Firebase Admin SDK before using Firestore in the function.
Without initialization, the function cannot access Firestore and will fail.
Always call admin.initializeApp() at the start of your functions file.
Deploying functions without the --only flag and accidentally deploying other Firebase resources.
This can cause unintended changes or longer deployment times.
Use 'firebase deploy --only functions' to deploy only your functions.
Not checking function logs after deployment to verify triggers work.
You might miss errors or failures in your functions.
Use 'firebase functions:log' to monitor function execution and debug.
Summary
Write authentication trigger functions to run code when users sign up or delete accounts.
Deploy functions using 'firebase deploy --only functions' to update your cloud triggers.
Check function logs with 'firebase functions:log' to ensure your triggers run correctly.

Practice

(1/5)
1. What does the Firebase Authentication trigger function onCreate do?
easy
A. It sends a password reset email.
B. It deletes a user from the database.
C. It runs automatically when a new user signs up.
D. It updates user profile information.

Solution

  1. Step 1: Understand the purpose of onCreate

    The onCreate trigger runs when a new user account is created in Firebase Authentication.
  2. Step 2: Match the trigger to the correct action

    Since it runs on new user sign-up, it does not delete users or send emails directly.
  3. Final Answer:

    It runs automatically when a new user signs up. -> Option C
  4. Quick Check:

    onCreate = New user signup trigger [OK]
Hint: Remember: onCreate = new user signup trigger [OK]
Common Mistakes:
  • Confusing onCreate with onDelete trigger
  • Thinking onCreate sends emails automatically
  • Assuming onCreate updates user data
2. Which of the following is the correct syntax to define a Firebase Authentication trigger function for user deletion in Node.js?
easy
A. functions.auth.user().onCreate((user) => { /* code */ });
B. exports.userDeleted = functions.auth.user().onDelete((user) => { /* code */ });
C. exports.userDeleted = functions.auth.user().onRemove((user) => { /* code */ });
D. functions.auth.user().delete((user) => { /* code */ });

Solution

  1. Step 1: Identify the correct trigger for user deletion

    The correct trigger for user deletion is onDelete attached to functions.auth.user().
  2. Step 2: Check the syntax for exporting the function

    The function should be exported using exports.functionName = ... syntax.
  3. Final Answer:

    exports.userDeleted = functions.auth.user().onDelete((user) => { /* code */ }); -> Option B
  4. Quick Check:

    onDelete trigger syntax = exports.userDeleted = functions.auth.user().onDelete((user) => { /* code */ }); [OK]
Hint: Use exports.functionName = functions.auth.user().onDelete(...) [OK]
Common Mistakes:
  • Using onCreate instead of onDelete for deletion
  • Using non-existent onRemove trigger
  • Not exporting the function properly
3. Given the following Firebase Authentication trigger function, what will be logged when a user signs up?
exports.welcomeUser = functions.auth.user().onCreate((user) => {
  console.log(`Welcome, ${user.email}!`);
});
medium
A. Welcome, undefined!
B. Welcome, user.email!
C. No output, function does not run on sign-up.
D. Welcome, user@example.com!

Solution

  1. Step 1: Understand the onCreate trigger behavior

    The function runs automatically when a new user signs up, receiving the user object with an email property.
  2. Step 2: Analyze the console.log statement

    The template string inserts the user's email, so it logs "Welcome, user@example.com!" if the user's email is user@example.com.
  3. Final Answer:

    Welcome, user@example.com! -> Option D
  4. Quick Check:

    onCreate logs user email correctly [OK]
Hint: onCreate passes user object with email property [OK]
Common Mistakes:
  • Assuming user.email is undefined
  • Thinking function does not run on sign-up
  • Misreading template string syntax
4. Identify the error in this Firebase Authentication trigger function code:
exports.deleteUserData = functions.auth.user().onDelete(user => {
  const uid = user.uid;
  admin.database().ref(`/users/${uid}`).remove();
});
medium
A. admin is not initialized or imported.
B. Incorrect trigger function; should use onCreate instead of onDelete.
C. Missing return statement for the database operation.
D. The user parameter should be destructured as { uid }.

Solution

  1. Step 1: Check for admin SDK initialization

    The code uses admin.database() but does not show admin being imported or initialized, which causes runtime errors.
  2. Step 2: Verify other parts of the code

    The trigger and user parameter usage are correct; missing return is not mandatory but recommended.
  3. Final Answer:

    admin is not initialized or imported. -> Option A
  4. Quick Check:

    admin SDK must be initialized before use [OK]
Hint: Always import and initialize admin SDK before database calls [OK]
Common Mistakes:
  • Confusing onDelete with onCreate trigger
  • Ignoring admin SDK initialization
  • Thinking return statement is mandatory
5. You want to send a welcome email only to users who sign up with an email ending in @example.com. Which code snippet correctly implements this using Firebase Authentication trigger functions?
hard
A. exports.sendWelcomeEmail = functions.auth.user().onCreate((user) => { if (user.email.endsWith('@example.com')) { sendEmail(user.email); } });
B. exports.sendWelcomeEmail = functions.auth.user().onDelete((user) => { if (user.email.includes('@example.com')) { sendEmail(user.email); } });
C. exports.sendWelcomeEmail = functions.auth.user().onCreate((user) => { if (user.email === '@example.com') { sendEmail(user.email); } });
D. exports.sendWelcomeEmail = functions.auth.user().onCreate((user) => { if (user.email.indexOf('@example.com') === 0) { sendEmail(user.email); } });

Solution

  1. Step 1: Choose the correct trigger for new user sign-up

    Use onCreate to run code when a user signs up, not onDelete.
  2. Step 2: Check the email condition for domain matching

    Use endsWith('@example.com') to check if the email ends with the domain. Using includes or equality check is incorrect here.
  3. Final Answer:

    exports.sendWelcomeEmail = functions.auth.user().onCreate((user) => { if (user.email.endsWith('@example.com')) { sendEmail(user.email); } }); -> Option A
  4. Quick Check:

    Use onCreate + endsWith() for domain check [OK]
Hint: Use onCreate and endsWith('@domain.com') to filter emails [OK]
Common Mistakes:
  • Using onDelete instead of onCreate
  • Checking email equality instead of endsWith
  • Using indexOf === 0 instead of endsWith
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard