Create a user
You have the following options for creating a new user:
From your app: Create a new user in your Firebase project by calling the
CreateUserWithEmailAndPasswordmethod or by signing in a user for the first time using a federated identity provider, such as Google Sign-In or Facebook Login.In the Firebase console: Create a new password-authenticated user in the Security > Authentication > Users tab.
Get the currently signed-in user
The recommended way to get the current user is by setting a listener on the Auth object:
Firebase.Auth.FirebaseAuth auth; Firebase.Auth.FirebaseUser user; // Handle initialization of the necessary firebase modules: void InitializeFirebase() { Debug.Log("Setting up Firebase Auth"); auth = Firebase.Auth.FirebaseAuth.DefaultInstance; auth.StateChanged += AuthStateChanged; AuthStateChanged(this, null); } // Track state changes of the auth object. void AuthStateChanged(object sender, System.EventArgs eventArgs) { if (auth.CurrentUser != user) { bool signedIn = user != auth.CurrentUser && auth.CurrentUser != null; if (!signedIn && user != null) { Debug.Log("Signed out " + user.UserId); } user = auth.CurrentUser; if (signedIn) { Debug.Log("Signed in " + user.UserId); } } } // Handle removing subscription and reference to the Auth instance. // Automatically called by a Monobehaviour after Destroy is called on it. void OnDestroy() { auth.StateChanged -= AuthStateChanged; auth = null; }
By using a listener, you ensure that the Auth object isn't in an intermediate state—such as initialization—when you get the current user.
You can also get the currently signed-in user by calling CurrentUser. If a
user isn't signed in, CurrentUser will return null. If a user is signed out,
the user's IsValid() will return false.
Persist a user's credential
The user's credentials will be stored in the local keystore after a user is signed in. The local cache of user credentials can be deleted by signing the user out. The keystore is platform specific:
- Apple platforms: Keychain Services.
- Android: Android Keystore.
- Windows: Credential Management API.
- OS X: Keychain Services.
- Linux: libsecret, which the user must have installed.
Get a user's profile
To get a user's profile information, use the accessor methods of an instance of
Firebase.Auth.FirebaseUser. For example:
Firebase.Auth.FirebaseUser user = auth.CurrentUser; if (user != null) { string name = user.DisplayName; string email = user.Email; System.Uri photo_url = user.PhotoUrl; // The user's Id, unique to the Firebase project. // Do NOT use this value to authenticate with your backend server, if you // have one; use User.TokenAsync() instead. string uid = user.UserId; }
Get a user's provider-specific profile information
To get the profile information retrieved from the sign-in providers linked to a
user, use the ProviderData method. For example:
Firebase.Auth.FirebaseUser user = auth.CurrentUser; if (user != null) { foreach (var profile in user.ProviderData) { // Id of the provider (ex: google.com) string providerId = profile.ProviderId; // UID specific to the provider string uid = profile.UserId; // Name, email address, and profile photo Url string name = profile.DisplayName; string email = profile.Email; System.Uri photoUrl = profile.PhotoUrl; } }
Update a user's profile
You can update a user's basic profile information—the user's display name
and profile photo URL—with the UpdateUserProfile method. For example:
Firebase.Auth.FirebaseUser user = auth.CurrentUser; if (user != null) { Firebase.Auth.UserProfile profile = new Firebase.Auth.UserProfile { DisplayName = "Jane Q. User", PhotoUrl = new System.Uri("https://example.com/jane-q-user/profile.jpg"), }; user.UpdateUserProfileAsync(profile).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("UpdateUserProfileAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("UpdateUserProfileAsync encountered an error: " + task.Exception); return; } Debug.Log("User profile updated successfully."); }); }
Set a user's email address
You can set a user's email address with the UpdateEmail method. For example:
Firebase.Auth.FirebaseUser user = auth.CurrentUser; if (user != null) { user.UpdateEmailAsync("user@example.com").ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("UpdateEmailAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("UpdateEmailAsync encountered an error: " + task.Exception); return; } Debug.Log("User email updated successfully."); }); }
Send a user a verification email
You can send an address verification email to a user with the
SendEmailVerification method. For example:
Firebase.Auth.FirebaseUser user = auth.CurrentUser; if (user != null) { user.SendEmailVerificationAsync().ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SendEmailVerificationAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SendEmailVerificationAsync encountered an error: " + task.Exception); return; } Debug.Log("Email sent successfully."); }); }
You can customize which email template is used in the Security > Authentication > Templates tab of the Firebase console. See Email Templates in Firebase Help Center.
Set a user's password
You can set a user's password with the UpdatePassword method. For example:
Firebase.Auth.FirebaseUser user = auth.CurrentUser; string newPassword = "SOME-SECURE-PASSWORD"; if (user != null) { user.UpdatePasswordAsync(newPassword).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("UpdatePasswordAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("UpdatePasswordAsync encountered an error: " + task.Exception); return; } Debug.Log("Password updated successfully."); }); }
Send a password reset email
You can send a password reset email to a user with the SendPasswordResetEmail
method. For example:
string emailAddress = "user@example.com"; if (user != null) { auth.SendPasswordResetEmailAsync(emailAddress).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SendPasswordResetEmailAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SendPasswordResetEmailAsync encountered an error: " + task.Exception); return; } Debug.Log("Password reset email sent successfully."); }); }
You can customize which email template is used in the Security > Authentication > Templates tab of the Firebase console. See Email Templates in Firebase Help Center.
You can also send password reset emails from the Firebase console.
Delete a user
You can delete a user account with the Delete method. For example:
Firebase.Auth.FirebaseUser user = auth.CurrentUser; if (user != null) { user.DeleteAsync().ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("DeleteAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("DeleteAsync encountered an error: " + task.Exception); return; } Debug.Log("User deleted successfully."); }); }
You can also delete users in the Firebase console in the Security > Authentication > Users tab.
Re-authenticate a user
Some security-sensitive actions—such as deleting an account, setting a primary email address, and changing a password—require that the user has recently signed in. If you perform one of these actions, and the user signed in too long ago, the action fails.
When this happens, re-authenticate the user by getting new sign-in credentials
from the user and passing the credentials to Reauthenticate. For example:
Firebase.Auth.FirebaseUser user = auth.CurrentUser; // Get auth credentials from the user for re-authentication. The example below shows // email and password credentials but there are multiple possible providers, // such as GoogleAuthProvider or FacebookAuthProvider. Firebase.Auth.Credential credential = Firebase.Auth.EmailAuthProvider.GetCredential("user@example.com", "password1234"); if (user != null) { user.ReauthenticateAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("ReauthenticateAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("ReauthenticateAsync encountered an error: " + task.Exception); return; } Debug.Log("User reauthenticated successfully."); }); }
Import user accounts
You can import user accounts from a file into your Firebase project by using the
Firebase CLI's auth:import command. For example:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14