DEV Community

Luv Dumka
Luv Dumka

Posted on

Firebase Authentication in Android using Kotlin (Login & Register)

Firebase Authentication in Android using Kotlin (Login & Register)

When building an Android app, one of the first things you might need is a user login system. Instead of building everything from scratch, I decided to use Firebase Authentication, which turned out to be fast, secure, and really simple to integrate.

Here’s how I implemented a basic email/password login and register feature using Firebase in an Android project written in Kotlin.
Step 1: Set Up Firebase in Android Studio

First, I created a new Firebase project:

Go to the Firebase Console.

Click on "Add Project" and follow the steps (I skipped Google Analytics).

Click on “Add App” and choose Android.

Register your app’s package name.

Download the google-services.json file and place it inside the app/ folder of your Android Studio project.
Enter fullscreen mode Exit fullscreen mode

Then, I updated the Gradle files.

In the project-level build.gradle file:

classpath 'com.google.gms:google-services:4.3.15'

In the app-level build.gradle file:

plugins {
id 'com.android.application'
id 'com.google.gms.google-services'
}

dependencies {
implementation 'com.google.firebase:firebase-auth-ktx:22.1.1'
}

After syncing the project, Firebase was ready to go.
Step 2: Design a Simple Login/Register Layout

Here’s the UI layout I used. It includes two EditTexts for email and password, and two Buttons — one for login and another for registration.

activity_main.xml

xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:padding="24dp">

<EditText
    android:id="@+id/emailEditText"
    android:hint="Email"
    android:inputType="textEmailAddress"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<EditText
    android:id="@+id/passwordEditText"
    android:hint="Password"
    android:inputType="textPassword"
    android:layout_marginTop="12dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<Button
    android:id="@+id/loginButton"
    android:text="Login"
    android:layout_marginTop="20dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<Button
    android:id="@+id/registerButton"
    android:text="Register"
    android:layout_marginTop="12dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
Enter fullscreen mode Exit fullscreen mode

Step 3: Add Firebase Login and Register Logic

In MainActivity.kt, I added the logic to handle user login and registration.

MainActivity.kt

package com.example.firebaseauthdemo

import android.os.Bundle
import android.widget.*
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.auth.FirebaseAuth

class MainActivity : AppCompatActivity() {

private lateinit var auth: FirebaseAuth
private lateinit var emailEditText: EditText
private lateinit var passwordEditText: EditText
private lateinit var loginButton: Button
private lateinit var registerButton: Button

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    auth = FirebaseAuth.getInstance()

    emailEditText = findViewById(R.id.emailEditText)
    passwordEditText = findViewById(R.id.passwordEditText)
    loginButton = findViewById(R.id.loginButton)
    registerButton = findViewById(R.id.registerButton)

    loginButton.setOnClickListener { loginUser() }
    registerButton.setOnClickListener { registerUser() }
}

private fun loginUser() {
    val email = emailEditText.text.toString().trim()
    val password = passwordEditText.text.toString().trim()

    if (email.isEmpty() || password.isEmpty()) {
        Toast.makeText(this, "Please enter both email and password", Toast.LENGTH_SHORT).show()
        return
    }

    auth.signInWithEmailAndPassword(email, password)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                Toast.makeText(this, "Login successful", Toast.LENGTH_SHORT).show()
            } else {
                Toast.makeText(this, "Login failed: ${task.exception?.message}", Toast.LENGTH_LONG).show()
            }
        }
}

private fun registerUser() {
    val email = emailEditText.text.toString().trim()
    val password = passwordEditText.text.toString().trim()

    if (email.isEmpty() || password.isEmpty()) {
        Toast.makeText(this, "Please fill all fields", Toast.LENGTH_SHORT).show()
        return
    }

    auth.createUserWithEmailAndPassword(email, password)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                Toast.makeText(this, "Account created successfully", Toast.LENGTH_SHORT).show()
            } else {
                Toast.makeText(this, "Registration failed: ${task.exception?.message}", Toast.LENGTH_LONG).show()
            }
        }
}
Enter fullscreen mode Exit fullscreen mode

}

Final Thoughts

Using Firebase Authentication helped me avoid a lot of backend setup. With just a few lines of Kotlin code, I was able to create a secure login and registration system for my app.

This setup is great for getting started quickly. From here, you can explore more features like:

Email verification

Password reset

Google Sign-In

Protecting routes after login

Saving user data with Firestore
Enter fullscreen mode Exit fullscreen mode

This was a great hands-on experience, and I hope it helps others who are looking to add Firebase Auth in their apps.

Top comments (0)