Bird
Raised Fist0
Fluttermobile~10 mins

Firebase Authentication in Flutter

Choose your learning style10 modes available
Introduction

Firebase Authentication helps you easily add user sign-in to your app. It keeps user info safe and lets users log in quickly.

When you want users to create accounts and log in to your app.
When you need to protect parts of your app so only signed-in users can access them.
When you want to let users sign in with email/password or social accounts like Google.
When you want to manage user sessions without building your own backend.
When you want to quickly add secure authentication without much code.
Syntax
Flutter
final FirebaseAuth auth = FirebaseAuth.instance;

// Sign up with email and password
UserCredential userCredential = await auth.createUserWithEmailAndPassword(
  email: 'email@example.com',
  password: 'password123',
);

// Sign in with email and password
UserCredential userCredential2 = await auth.signInWithEmailAndPassword(
  email: 'email@example.com',
  password: 'password123',
);

// Sign out
await auth.signOut();

Use FirebaseAuth.instance to access authentication methods.

All sign-in and sign-up methods return a UserCredential object with user info.

Examples
This creates a new user account with email and password.
Flutter
final auth = FirebaseAuth.instance;

// Sign up new user
await auth.createUserWithEmailAndPassword(
  email: 'user@example.com',
  password: 'mypassword',
);
This signs in a user who already has an account.
Flutter
final auth = FirebaseAuth.instance;

// Sign in existing user
await auth.signInWithEmailAndPassword(
  email: 'user@example.com',
  password: 'mypassword',
);
This logs out the current user from the app.
Flutter
final auth = FirebaseAuth.instance;

// Sign out current user
await auth.signOut();
Sample App

This app lets users sign up, sign in, and sign out using Firebase Authentication with email and password. It shows messages for success or failure.

Flutter
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_auth/firebase_auth.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: AuthExample(),
    );
  }
}

class AuthExample extends StatefulWidget {
  @override
  _AuthExampleState createState() => _AuthExampleState();
}

class _AuthExampleState extends State<AuthExample> {
  final FirebaseAuth _auth = FirebaseAuth.instance;
  final TextEditingController _emailController = TextEditingController();
  final TextEditingController _passwordController = TextEditingController();
  String _message = '';

  Future<void> _signUp() async {
    try {
      await _auth.createUserWithEmailAndPassword(
        email: _emailController.text.trim(),
        password: _passwordController.text.trim(),
      );
      setState(() {
        _message = 'Sign up successful!';
      });
    } catch (e) {
      setState(() {
        _message = 'Sign up failed: $e';
      });
    }
  }

  Future<void> _signIn() async {
    try {
      await _auth.signInWithEmailAndPassword(
        email: _emailController.text.trim(),
        password: _passwordController.text.trim(),
      );
      setState(() {
        _message = 'Sign in successful!';
      });
    } catch (e) {
      setState(() {
        _message = 'Sign in failed: $e';
      });
    }
  }

  Future<void> _signOut() async {
    await _auth.signOut();
    setState(() {
      _message = 'Signed out';
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Firebase Auth Example')),
      body: Padding(
        padding: EdgeInsets.all(16),
        child: Column(
          children: [
            TextField(
              controller: _emailController,
              decoration: InputDecoration(labelText: 'Email'),
              keyboardType: TextInputType.emailAddress,
            ),
            TextField(
              controller: _passwordController,
              decoration: InputDecoration(labelText: 'Password'),
              obscureText: true,
            ),
            SizedBox(height: 20),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceAround,
              children: [
                ElevatedButton(onPressed: _signUp, child: Text('Sign Up')),
                ElevatedButton(onPressed: _signIn, child: Text('Sign In')),
                ElevatedButton(onPressed: _signOut, child: Text('Sign Out')),
              ],
            ),
            SizedBox(height: 20),
            Text(_message, style: TextStyle(color: Colors.blue)),
          ],
        ),
      ),
    );
  }
}
OutputSuccess
Important Notes

Always initialize Firebase before using authentication.

Use try-catch to handle errors like wrong password or user not found.

Keep user passwords safe by never storing them yourself; Firebase handles this securely.

Summary

Firebase Authentication makes adding user login easy and secure.

Use createUserWithEmailAndPassword to sign up and signInWithEmailAndPassword to log in.

Always handle errors and show clear messages to users.

Practice

(1/5)
1. What is the main purpose of Firebase Authentication in a Flutter app?
easy
A. To send push notifications to users
B. To securely manage user sign-up and login
C. To design the app's user interface
D. To store user data in a database

Solution

  1. Step 1: Understand Firebase Authentication role

    Firebase Authentication helps apps manage user accounts securely.
  2. Step 2: Differentiate from other Firebase services

    It does not store user data or handle UI or notifications.
  3. Final Answer:

    To securely manage user sign-up and login -> Option B
  4. Quick Check:

    Authentication = Secure login [OK]
Hint: Authentication means managing user login securely [OK]
Common Mistakes:
  • Confusing authentication with database storage
  • Thinking it handles UI design
  • Assuming it sends notifications
2. Which Flutter Firebase method is used to sign up a new user with email and password?
easy
A. createUserWithEmailAndPassword
B. signOut
C. signInWithEmailAndPassword
D. sendPasswordResetEmail

Solution

  1. Step 1: Identify sign-up method

    The method to create a new user is createUserWithEmailAndPassword.
  2. Step 2: Differentiate from sign-in and other methods

    signInWithEmailAndPassword is for login, not sign-up.
  3. Final Answer:

    createUserWithEmailAndPassword -> Option A
  4. Quick Check:

    Sign-up method = createUserWithEmailAndPassword [OK]
Hint: Sign-up uses createUserWithEmailAndPassword [OK]
Common Mistakes:
  • Using signInWithEmailAndPassword for sign-up
  • Confusing signOut with sign-up
  • Mixing reset email with sign-up
3. What will the following Flutter code print if the user enters correct email and password?
try {
  await FirebaseAuth.instance.signInWithEmailAndPassword(email: 'user@example.com', password: 'pass123');
  print('Login successful');
} catch (e) {
  print('Login failed');
}
medium
A. No output
B. Login failed
C. Syntax error
D. Login successful

Solution

  1. Step 1: Analyze try block with correct credentials

    Since email and password are correct, signInWithEmailAndPassword succeeds.
  2. Step 2: Check catch block execution

    No error occurs, so catch block is skipped and 'Login successful' prints.
  3. Final Answer:

    Login successful -> Option D
  4. Quick Check:

    Correct login prints success [OK]
Hint: Correct login prints success message [OK]
Common Mistakes:
  • Assuming catch block runs on success
  • Thinking syntax error occurs
  • Ignoring async/await behavior
4. Identify the error in this Flutter Firebase Authentication code snippet:
final user = await FirebaseAuth.instance.createUserWithEmailAndPassword(email: email, password: password);
print(user.email);
medium
A. createUserWithEmailAndPassword returns UserCredential, not User
B. Email and password parameters are missing
C. print statement syntax is incorrect
D. Await keyword cannot be used here

Solution

  1. Step 1: Check return type of createUserWithEmailAndPassword

    This method returns a UserCredential object, not a User directly.
  2. Step 2: Access user email correctly

    The email is inside user.user.email, so printing user.email causes error.
  3. Final Answer:

    createUserWithEmailAndPassword returns UserCredential, not User -> Option A
  4. Quick Check:

    Return type is UserCredential [OK]
Hint: Remember createUserWithEmailAndPassword returns UserCredential [OK]
Common Mistakes:
  • Treating UserCredential as User
  • Forgetting to access .user property
  • Misusing await keyword
5. You want to show a friendly error message when login fails due to wrong password. Which Flutter Firebase Authentication code snippet correctly handles this?
try {
  await FirebaseAuth.instance.signInWithEmailAndPassword(email: email, password: password);
} catch (e) {
  if (e.code == 'wrong-password') {
    print('Incorrect password. Please try again.');
  } else {
    print('Login error: ' + e.message);
  }
}
hard
A. Correctly checks error code and shows message
B. e.code is not available on exception object
C. Should use on FirebaseAuthException catch instead of generic catch
D. print statements should be replaced with throw

Solution

  1. Step 1: Understand error handling in Firebase Auth

    FirebaseAuthException provides the code property; generic catch (e) may not.
  2. Step 2: Use specific catch for FirebaseAuthException

    Using on FirebaseAuthException catch (e) allows access to e.code safely.
  3. Step 3: Evaluate given code

    Given code uses generic catch, so e.code may cause runtime error.
  4. Final Answer:

    Should use on FirebaseAuthException catch instead of generic catch -> Option C
  5. Quick Check:

    Use FirebaseAuthException catch for error codes [OK]
Hint: Catch FirebaseAuthException to access error codes safely [OK]
Common Mistakes:
  • Using generic catch without exception type
  • Assuming all exceptions have code property
  • Replacing print with throw unnecessarily
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard