Go to console

firebase::auth::Auth

#include <auth.h>

Firebase authentication object.

Summary

firebase::auth::Auth is the gateway to the Firebase authentication API. With it, you can reference firebase::auth::User objects to manage user accounts and credentials.

Each firebase::App has up to one firebase::auth::Auth class. You acquire the firebase::auth::Auth class through the static function firebase::auth::Auth::GetAuth.

For example:

// Get the Auth class for your App.
firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);

// Request anonymous sign-in and wait until asynchronous call completes.
firebase::Future sign_in_future =
    auth->SignInAnonymously();
while (sign_in_future.status() == firebase::kFutureStatusPending) {
  Wait(100);
  printf("Signing in...\n");
}

// Print sign in results.
const firebase::auth::AuthError error =
    static_cast<firebase::auth::AuthError>(sign_in_future.error());
if (error != firebase::auth::kAuthErrorNone) {
  printf("Sign in failed with error `%s`\n",
         sign_in_future.error_message());
} else {
  firebase::auth::User* user = *sign_in_future.result();
  printf("Signed in as %s user.\n",
         user->Anonymous() ? "an anonymous" : "a non-anonymous");
}

Constructors and Destructors

~Auth()

Public functions

AddAuthStateListener(AuthStateListener *listener)
void
Registers a listener to changes in the authentication state.
AddIdTokenListener(IdTokenListener *listener)
void
Registers a listener to changes in the ID token state.
CreateUserWithEmailAndPassword(const char *email, const char *password)
Future< User * >
Creates, and on success, logs in a user with the given email address and password.
CreateUserWithEmailAndPasswordLastResult() const
Future< User * >
Get results of the most recent call to CreateUserWithEmailAndPassword.
FetchProvidersForEmail(const char *email)
Asynchronously requests the IDPs (identity providers) that can be used for the given email address.
FetchProvidersForEmailLastResult() const
Get results of the most recent call to FetchProvidersForEmail.
RemoveAuthStateListener(AuthStateListener *listener)
void
Unregisters a listener of authentication changes.
RemoveIdTokenListener(IdTokenListener *listener)
void
Unregisters a listener of ID token changes.
SendPasswordResetEmail(const char *email)
Future< void >
Initiates a password reset for the given email address.
SendPasswordResetEmailLastResult() const
Future< void >
Get results of the most recent call to SendPasswordResetEmail.
SignInAndRetrieveDataWithCredential(const Credential & credential)
Asynchronously logs into Firebase with the given credentials.
SignInAndRetrieveDataWithCredentialLastResult() const
Get results of the most recent call to SignInAndRetrieveDataWithCredential.
SignInAnonymously()
Future< User * >
Asynchronously creates and becomes an anonymous user.
SignInAnonymouslyLastResult() const
Future< User * >
Get results of the most recent call to SignInAnonymously.
SignInWithCredential(const Credential & credential)
Future< User * >
Convenience method for SignInAndRetrieveDataWithCredential that doesn't return additional identity provider data.
SignInWithCredentialLastResult() const
Future< User * >
Get results of the most recent call to SignInWithCredential.
SignInWithCustomToken(const char *token)
Future< User * >
Asynchronously logs into Firebase with the given Auth token.
SignInWithCustomTokenLastResult() const
Future< User * >
Get results of the most recent call to SignInWithCustomToken.
SignInWithEmailAndPassword(const char *email, const char *password)
Future< User * >
Signs in using provided email address and password.
SignInWithEmailAndPasswordLastResult() const
Future< User * >
Get results of the most recent call to SignInWithEmailAndPassword.
SignOut()
void
Removes any existing authentication credentials from this client.
app()
App &
Gets the App this auth object is connected to.
current_user()
User *
Synchronously gets the cached current user, or nullptr if there is none.

Public static functions

GetAuth(App *app, InitResult *init_result_out)
Auth *
Returns the Auth object for an App.

Structs

firebase::auth::Auth::FetchProvidersResult

Results of calls FetchProvidersForEmail.

Public functions

AddAuthStateListener

void AddAuthStateListener(
  AuthStateListener *listener
)

Registers a listener to changes in the authentication state.

There can be more than one listener registered at the same time. The listeners are called asynchronously, possibly on a different thread.

Authentication state changes are:

  • Right after the listener has been registered
  • When a user signs in
  • When the current user signs out
  • When the current user changes

It is a recommended practice to always listen to sign-out events, as you may want to prompt the user to sign in again and maybe restrict the information or actions they have access to.

Use RemoveAuthStateListener to unregister a listener.

Note:The caller owns listener and is responsible for destroying it. When listener is destroyed, or when Auth is destroyed, RemoveAuthStateListener is called automatically.

AddIdTokenListener

void AddIdTokenListener(
  IdTokenListener *listener
)

Registers a listener to changes in the ID token state.

There can be more than one listener registered at the same time. The listeners are called asynchronously, possibly on a different thread.

Authentication state changes are:

  • Right after the listener has been registered
  • When a user signs in
  • When the current user signs out
  • When the current user changes
  • When there is a change in the current user's token

Use RemoveIdTokenListener to unregister a listener.

Note:The caller owns listener and is responsible for destroying it. When listener is destroyed, or when Auth is destroyed, RemoveIdTokenListener is called automatically.

CreateUserWithEmailAndPassword

Future< User * > CreateUserWithEmailAndPassword(
  const char *email,
  const char *password
)

Creates, and on success, logs in a user with the given email address and password.

An error is returned when account creation is unsuccessful (due to another existing account, invalid password, etc.).

CreateUserWithEmailAndPasswordLastResult

Future< User * > CreateUserWithEmailAndPasswordLastResult() const 

Get results of the most recent call to CreateUserWithEmailAndPassword.

FetchProvidersForEmail

Future< FetchProvidersResult > FetchProvidersForEmail(
  const char *email
)

Asynchronously requests the IDPs (identity providers) that can be used for the given email address.

Useful for an "identifier-first" login flow.

The following sample code illustrates a possible login screen that allows the user to pick an identity provider.

// This function is called every frame to display the login screen.
// Returns the identity provider name, or "" if none selected.
const char* DisplayIdentityProviders(firebase::auth::Auth& auth,
                                     const char* email) {
  // Get results of most recent call to FetchProvidersForEmail().
  firebase::Future future =
      auth.FetchProvidersForEmailLastResult();
  const firebase::auth::Auth::FetchProvidersResult* result =
      future.result();

  // Header.
  ShowTextBox("Sign in %s", email);

  // Fetch providers from the server if we need to.
  const bool refetch =
      future.status() == firebase::kFutureStatusInvalid ||
      (result != nullptr && strcmp(email, result->email.c_str()) != 0);
  if (refetch) {
    auth.FetchProvidersForEmail(email);
  }

  // Show a waiting icon if we're waiting for the asynchronous call to
  // complete.
  if (future.status() != firebase::kFutureStatusComplete) {
    ShowImage("waiting icon");
    return "";
  }

  // Show error code if the call failed.
  if (future.error() != firebase::auth::kAuthErrorNone) {
    ShowTextBox("Error fetching providers: %s", future.error_message());
  }

  // Show a button for each provider available to this email.
  // Return the provider for the button that's pressed.
  for (size_t i = 0; i < result->providers.size(); ++i) {
    const bool selected = ShowTextButton(result->providers[i].c_str());
    if (selected) return result->providers[i].c_str();
  }
  return "";
}

FetchProvidersForEmailLastResult