DEV Community

Cover image for Stop Losing 86% of Mobile Users: Lazy Auth with Firebase (Tutorial)
arnostorg
arnostorg

Posted on

Stop Losing 86% of Mobile Users: Lazy Auth with Firebase (Tutorial)

The $300 Million Problem ๐Ÿ’ธ

The famous "$300 Million Button" case study proved that forcing users to register before checkout is a revenue killer. On mobile, the stats are even worseโ€”up to 86% of users abandon apps when hit with an immediate login wall.

The solution? Lazy Registration (or "Just-in-Time" auth).

In this quick tutorial, Iโ€™ll show you how to implement a flow where users are "logged in" anonymously first, and only asked for credentials when they want to save their work.

Step 1: Start with Anonymous Auth ๐Ÿ‘ป

Firebase provides a specific method to create temporary, persisted sessions without asking the user for any data.

Docs: signInAnonymously

import { getAuth, signInAnonymously } from "firebase/auth";

const auth = getAuth();

// 1. Log them in silently
await signInAnonymously(auth);

// 2. Listen to the state (User ID persists on reload!)
auth.onAuthStateChanged((user) => {
  if (user && user.isAnonymous) {
    console.log("User is a Guest ๐Ÿ‘ป", user.uid);
  }
});

Enter fullscreen mode Exit fullscreen mode

Step 2: The "Upgrade" (Account Linking) ๐Ÿ”—

This is the most critical part. When the user decides to sign up (e.g., to save their settings), you don't create a new account. You upgrade the existing one.

This preserves the uid and all Firestore data attached to it.

Docs: linkWithCredential

import { EmailAuthProvider, linkWithCredential } from "firebase/auth";

const upgradeAccount = async (email, password) => {
  const credential = EmailAuthProvider.credential(email, password);
  const user = auth.currentUser;

  try {
    // Merge the new credentials into the existing anonymous account
    const result = await linkWithCredential(user, credential);
    console.log("Guest upgraded to Permanent User! ๐ŸŽ‰");
  } catch (error) {
    console.error("Error linking account:", error);
  }
};

Enter fullscreen mode Exit fullscreen mode

Pro Tip: Cleaning up "Ghost" Users ๐Ÿงน

One downside of Anonymous Auth is that you might end up with thousands of abandoned guest accounts in your database.

You can solve this without writing a custom script by enabling Google Cloud Identity Platform. This allows you to set an automatic deletion policy (e.g., delete anonymous users inactive for 30 days).

Docs: Identity Platform Cleanup

Read the Full Guide ๐Ÿ“˜

I wrote a detailed deep dive on my personal blog that covers:

  • React Hooks implementation.
  • Handling credential-already-in-use errors.
  • Screenshots of the Identity Platform configuration.
  • A live demo using my Windows CLI learning app.

๐Ÿ‘‰ Read the full article with guiding screenshots: Lazy Registrations with Firebase


Have you implemented deferred auth in your apps?

Top comments (0)