Y así es como iniciarán sesión en el sistema:
const handleSubmit = async (e) => { e.preventDefault(); const auth = getAuth(); console.log(email, password, "1"); setIsLoading(true); signInWithEmailAndPassword(auth, email, password) .then((userCredential) => { // Signed in const user = userCredential.user; setIsLoading(false); navigate("/Homepage"); // ... }) .catch((error) => { const errorCode = error.code; const errorMessage = error.message; setIsLoading(false); alert(errorMessage); }); };
Estoy configurando Firestore donde solo la persona que inició sesión podrá crear y escribir en todos los orders
de colecciones, product
, category
y el history
de subcolecciones. Lo que significa que todos los usuarios autenticados podrán leer y escribir en todas las colecciones y subcolecciones.
Esta es la colección de Firestore:
Reglas de seguridad de Firestore:
service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.auth != null; } } }
Ahora, estoy probando esto con el patio de recreo de Reglas, sin embargo, aún permitirá el acceso incluso si el ID de usuario es incorrecto y el correo electrónico es correcto. ¿Hay algún problema con mis reglas de seguridad de Firestore o estoy haciendo las reglas incorrectamente?
¿Hay algún problema con mis reglas de seguridad de Firestore o estoy haciendo las reglas incorrectamente?
Tampoco, simplemente funciona un poco diferente de lo que supones.
La regla de seguridad no verifica si su uid
proporcionado coincide con el email
, por lo tanto, cualquier uid y cualquier correo electrónico en su objeto de auth
(consulte el panel "Carga útil de autenticación") pasará su regla de seguridad en Playground. Pasa porque, como puede ver en el panel Carga útil, request.auth
no es null
.
Ahora, asume que cualquiera puede enviar cualquier uid y cualquier correo electrónico a Firestore y pasar su regla de seguridad. Este no es el caso.
Su usuario no crea el objeto que ve en el panel "Carga útil de autenticación": Firebase lo hace por usted en segundo plano cuando recibe la solicitud del cliente.
Sus usuarios deben enviar un token junto con la solicitud. Este token es el "pegamento" entre una sesión de usuario y un usuario específico en Firebase Auth. Firebase verifica que el token sea válido y luego agrega los detalles de autenticación como auth
a su request
. En Firestore, tiene acceso a esos detalles de autenticación en las Reglas de seguridad.
En Playground, asume el rol de Firebase Auth y decide cuál es la carga útil de autenticación. Firestore asume que su entrada es correcta y la compara con la regla de seguridad que proporcionó. Su carga útil de auth
pasa la prueba porque solo prueba si no es null
.
TL&DR: su regla de seguridad está bien, Playground solo asume que ha generado una carga útil de autenticación válida. En el mundo real, Firebase generaría esta carga útil por ti.