Cómo implementar autenticación de usuarios y restringir accesos en Firestore con reglas de seguridad.

La autenticación de usuarios es uno de los pilares fundamentales en el desarrollo de aplicaciones seguras. Firebase Authentication nos permite registrar e identificar usuarios de forma sencilla, y Cloud Firestore nos permite controlar quién puede acceder, leer o escribir datos mediante reglas de seguridad.

En este artículo aprenderás cómo implementar un sistema de autenticación de usuarios en Flutter usando Firebase Auth y cómo configurar reglas de seguridad en Firestore para restringir el acceso a los datos solo a los usuarios autorizados.

🎯 ¿Qué vas a lograr?

  • Autenticación de usuarios con correo y contraseña

  • Reglas de Firestore para proteger la información por usuario

  • Mostrar datos sólo al usuario que los creó

🚀 Paso 1: Activar el método de autenticación en Firebase

  • Ve a https://console.firebase.google.com/

  • Selecciona tu proyecto

  • Navega a Authentication > Métodos de inicio de sesión

  • Activa el método “Correo electrónico y contraseña”

📦 Paso 2: Agregar firebase_auth en pubspec.yaml

Agrega estas dependencias:

dependencies:
firebase_core: ^2.25.0
firebase_auth: ^4.15.0
cloud_firestore: ^4.14.0

Luego ejecuta:

flutter pub get

🧩 Paso 3: Crear funciones de registro e inicio de sesión

import 'package:firebase_auth/firebase_auth.dart';

Future<void> registrarUsuario(String email, String password) async {
await FirebaseAuth.instance.createUserWithEmailAndPassword(
email: email,
password: password,
);
}

Future<void> iniciarSesion(String email, String password) async {
await FirebaseAuth.instance.signInWithEmailAndPassword(
email: email,
password: password,
);
}

🧠 Bonus: Para cerrar sesión

await FirebaseAuth.instance.signOut();

🔥 Paso 4: Guardar datos asociados al usuario

Cuando guardes datos en Firestore, incluye el UID del usuario autenticado:

final user = FirebaseAuth.instance.currentUser;
await FirebaseFirestore.instance.collection('notas').add({
'titulo': 'Mi primera nota',
'contenido': 'Hola mundo',
'uid': user?.uid,
'fecha': FieldValue.serverTimestamp(),
});

🛡 Paso 5: Configurar reglas de seguridad en Firestore

Ve a Firebase Console > Firestore Database > Reglas y reemplaza con lo siguiente:

rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /notas/{document} {
allow read, write: if request.auth != null && request.auth.uid == resource.data.uid;
}
}
}

📌 ¿Qué hacen estas reglas?

  • Solo permiten leer y escribir documentos si el usuario está autenticado (request.auth != null)

  • El usuario solo puede acceder a documentos donde el campo uid coincida con su propio UID

🔍 Validación en la app

Al mostrar los datos en tu app, filtra por el UID:

final user = FirebaseAuth.instance.currentUser;

StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection('notas')
.where('uid', isEqualTo: user?.uid)
.orderBy('fecha')
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) return CircularProgressIndicator();
final notas = snapshot.data!.docs;
return ListView.builder(
itemCount: notas.length,
itemBuilder: (context, index) {
final nota = notas[index];
return ListTile(
title: Text(nota['titulo']),
subtitle: Text(nota['contenido']),
);
},
);
},
)

🎉 Conclusión

¡Listo! Ya tienes una aplicación Flutter que permite a los usuarios autenticarse y acceder solo a sus propios datos en Firestore, protegidos por reglas de seguridad. Esta arquitectura es ideal para cualquier aplicación que maneje datos sensibles como notas personales, tareas, historial, etc.

Comentarios

Entradas más populares de este blog

Cómo gestionar el estado de autenticación y proteger las rutas de tu app Flutter

Cómo manejar notificaciones push avanzadas con Firebase Cloud Messaging y Flutter

Cómo usar Firestore en Flutter para guardar y mostrar datos en tiempo real.