necesita algunos consejos aquí.
La aplicación web My Nuxt & Firebase/Firestore tendrá 3 tipos diferentes de usuarios:
Primero, quiero que mis usuarios, cada vez que inicien sesión, inicien sesión en la página relacionada con su tipo de usuario. por ejemplo: inicio de sesión de subcontratista empujar a /subcontratista, inicio de sesión de contratista empujar a /contratista, etc.
También quiero que el usuario solo pueda ver páginas relacionadas con sus tipos. (el usuario A solo puede ver /A y /Atwo, el usuario B solo puede ver /B y /Btwo, el usuario C solo puede ver /C y /Ctwo, etc.)
Quiero evitar el uso de funciones en la nube si puedo, por lo que entiendo, no puede implementar su aplicación en el plan gratuito si su aplicación tiene funciones en la nube.
De todos modos, ¿está por debajo de la forma correcta de hacerlo?
Si es correcto, ¿cómo hacer los pasos 1 y 2? ¿Hay algún artículo o código fuente de la aplicación de la vida real que explique brevemente lo que quería?
Principiante aquí. Ya he buscado por aquí y por allá en Internet, pero no puedo encontrar la respuesta que quería :(
Las reclamaciones personalizadas son definitivamente una opción, pero eso requeriría funciones en la nube o un servidor. Sí, puede almacenar el tipo de usuario en su documento de Firestore y verificarlo antes de que se muestre la página o cuando sea necesario. Sin embargo, debe asegurarse de que solo los usuarios autorizados puedan cambiar su función.
El flujo sería tan simple como:
import { getAuth, signInWithEmailAndPassword } from "firebase/auth"; import { getFirestore, doc, getDoc } from "firebase/firestore"; const auth = getAuth(); const firestore = getFirestore(); const login = async () => { const { user } = await signInWithEmailAndPassword(auth, email, password); // Reading user document const docRef = doc(firestore, "users", user.uid); const docSnap = await getDoc(docRef); const { userType } = docSnap.data() switch (userType) { case 'contractor': // redirect to /contractor break; case 'sub-contractor': // redirect to /sub-contractor break; default: // redirect to default page break; } }También quiero que el usuario solo pueda ver páginas relacionadas con sus tipos.
Puede seguir el mismo método en un middleware del lado del servidor. Primero lea el tipo de usuario y luego verifique si el usuario está autorizado para visitar la página. Si no, redirija a cualquier otra página.
La mejor parte de usar Reclamos personalizados es que también puede leerlos en las reglas de seguridad de Realtime Database, Firestore y Storage. Si almacena el tipo de usuario en Firestore, no podrá leerlo en las reglas de seguridad de ningún otro servicio de Firebase. El uso de Firestore también incurre en un cargo adicional por leer el rol del usuario cada vez. Necesita una función en la nube para configurar solo el reclamo personalizado y no leer el reclamo cada vez.