Add user to the database

You probably want to know how to add a user to your database after they authenticate, so you can do things with them in your app after they sign in.

If you already have your own logic set up for adding users to your database, then you might not need this guide, but we still recommend reading through it.

Want to skip to the real code example? Click here.

Core Concepts

There are typically two separate steps to a user signing in to an app:

  1. Authenticate: Let the user verify their identity and securely enter your app (this is what Doorman does).

  2. Add user to database: Most apps want to collect information from users after they authenticate, like a name, profile picture, etc. In order to do so, once a user has authenticated, you will probably do the following steps:

    1. Make a request to your database, and check if the user exists/has completed onboarding.

    2. If the user exists, send them into your app.

    3. If the user does not exist, send them to an onboarding flow.

Visualization

How to add user to DB

Adding your user to the database with Doorman is easy. It just requires a few extra steps after the initial set up.

Oversimplified example

This is an oversimplified version of the logic we want to create:

if (user) {
// user is authenticated
const uid = user.uid // user id
// check DB to see if the user exists
const { exists } = await doesUserExistInDb(uid)
// set state based on the DB value
setUserExists(exists)
} else {
// user is not signed in, reset the state
setUserExists(false)
}

In a component, this oversimplified code might look like this:

// this screen shows up after the user has authenticated
export default function App() {
const [checkingIfExists, setCheckingIfExists] = useState(false)
const [userExists, setUserExists] = useState(false)
const onAuthStateChanged = async (user) => {
if (user) {
// user is authenticated
const uid = user.uid // user id
// show loading indicator
setCheckingIfExists(true)
// check DB to see if the user exists
const { exists } = await doesUserExistInDb(uid)
// set state based on the DB value
setUserExists(exists)
// set loading state to false
setCheckingIfExists(false)
} else {
// user is not signed in, reset the state
setUserExists(false)
setCheckingIfExists(false)
}
}
// if the DB call is loading
if (checkingIfExists) return <LoadingScreen />
// if the user doesn't exist
if (!userExists) return <OnboardingStack />
// user exists! render the app
return <App />
}

This screen would show up after your user has authenticated.

Real code example

Let's continue to the next page to see how to implement this in real code with Doorman: