Quiero configurar reclamos personalizados para una cierta cantidad de usuarios, digamos que 5 usuarios serían administradores en mi sitio web. Quiero que estos 5 usuarios puedan iniciar sesión a través de la página de inicio de sesión que los redirigiría al tablero.
pero todavía no entiendo completamente el concepto de reclamos personalizados y cómo usarlos, y la documentación de firebase está limitada con ejemplos.
En su ejemplo, muestran que puedo pasar un uid al que quiero asignar un reclamo personalizado, pero ¿cómo se supone que esto es una variable cuando quiero que los uid's ciertos Users collection de mi base de datos de Firestore sean administradores y tengan un reclamo personalizado? , en otras palabras, dónde colocaría este código o cómo asignaría un reclamo personalizado a más de un usuario a la vez y cómo y dónde se ejecutaría este código.
si alguien me puede dar un ejemplo de cómo haría que esto funcione.
Aquí esta lo que hice:
creó un archivo firebaseAdmin.js:
var admin = require("firebase-admin"); // lets say for instance i want these two users to be admins //2jfow4fd3H2ZqYLWZI2s1YdqOPB42 //2jfow4vad2ZqYLWZI2s1YdqOPB42 what am i supposed to do? admin .auth() .setCustomUserClaims(uid, { admin: true }) .then(() => { // The new custom claims will propagate to the user's ID token the // next time a new one is issued. });Sinceramente, no sé qué hacer a partir de aquí.
Los reclamos personalizados solo se pueden configurar desde un entorno de servidor privilegiado a través del SDK de administración de Firebase. Las formas más sencillas son usar un script de Node.js (ejecutando el SDK de administrador) o una función en la nube (que también usa el SDK de administrador).
Veamos el ejemplo de una función de nube invocable a la que llama desde su front-end (y en la que puede comprobar el UID del usuario que la llama, es decir, un superadministrador).
exports.setAdminClaims = functions.https.onCall(async (data, context) => { // If necessary check the uid of the caller, via the context object const adminUIDs = ['2jfow4fd3H2ZqYLWZI2s1YdqOPB42', '767fjdhshd3H2ZqYLWZI2suyyqOPB42']; await Promise.all(adminUIDs.map(uid => admin.auth().setCustomUserClaims(uid, { admin: true }))); return { result: "Operation completed" } });Un script de Node.js sería similar:
#!/usr/bin/node const admin = require('firebase-admin'); admin.initializeApp({ credential: admin.credential.cert(".....json") // See remark on the private key below }); const adminUIDs = ['2jfow4fd3H2ZqYLWZI2s1YdqOPB42', '767fjdhshd3H2ZqYLWZI2suyyqOPB42']; Promise.all(adminUIDs.map(uid => admin.auth().setCustomUserClaims(uid, { admin: true }))) .then(() => { console.log("Operation completed") })Debe generar un archivo de clave privada en formato JSON para su cuenta de servicio, como se detalla en el documento .
Luego, cuando se configuran los Reclamos, puede acceder a estos Reclamos en su aplicación web y adaptar la interfaz de usuario (o el flujo de navegación) según el hecho de que el usuario tenga (o no) el reclamo de admin . Más detalles aquí en el documento.