You can integrate Firebase Authentication with a custom authentication system by modifying your authentication server to produce custom signed tokens when a user successfully signs in. Your app receives this token and uses it to authenticate with Firebase.
Before you begin
- If you haven't already, follow the steps in the Get started guide.
- Install and configure the Firebase Admin SDK. Be sure to initialize the SDK with the correct credentials for your Firebase project.
Authenticate with Firebase
-
When users sign in to your app, send their sign-in credentials (for example, their username and password) to your authentication server. Your server checks the credentials and, if they are valid, creates a custom Firebase token and sends the token back to your app.
After you receive the custom token from your authentication server, pass it to
signInWithCustomToken()
to sign in the user:try { final userCredential = await FirebaseAuth.instance.signInWithCustomToken(token); print("Sign-in successful."); } on FirebaseAuthException catch (e) { switch (e.code) { case "invalid-custom-token": print("The supplied token is not a Firebase custom auth token."); break; case "custom-token-mismatch": print("The supplied token is for a different Firebase project."); break; default: print("Unknown error."); } }
Next steps
After a user creates a new account, this account is stored as part of your Firebase project, and can be used to identify a user across every app in your project, regardless of what sign-in method the user used.
In your apps, you can get the user's basic profile information from the
User
object. See Manage Users.
In your Firebase Realtime Database and Cloud Storage Security Rules, you can
get the signed-in user's unique user ID from the auth
variable, and use it to
control what data a user can access.
You can allow users to sign in to your app using multiple authentication providers by linking auth provider credentials) to an existing user account.
To sign out a user, call signOut()
:
await FirebaseAuth.instance.signOut();