Uso Firestore v9 en el proyecto React. Estoy tratando de agregar un elemento con una fecha de creación. Quiero asegurarme de que la fecha esté actualizada y que el usuario no la haya cambiado.
Mi función de agregar:
import { collection, addDoc, Timestamp } from "firebase/firestore"; const startSignal = async () => { try { const docRef = await addDoc(collection(db, "signals"), { active: true, createdAt: Timestamp.now() }); console.log(docRef); } catch (e) { console.log("error"); console.log(e); } }Mis reglas de Firestore:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /signals/{document=**} { allow write: if request.auth != null && request.resource.data.createdAt == request.time; } } }Cuando trato de agregar, obtengo una negativa. Considero que en el momento de la ejecución y tramitación de la solicitud, la hora no coincide.
¿Cómo puedo asegurarme de que la solicitud tiene la hora correcta?
El único valor que siempre es igual a request.time en las reglas de seguridad es el token devuelto por serverTimestamp() . serverTimestamp() se analiza en la documentación .
import { serverTimestamp } from "firebase/firestore"; const docRef = await addDoc(collection(db, "signals"), { active: true, createdAt: serverTimestamp() });