He estado tratando de usar reclamos personalizados de Firebase y pude crear con éxito roles basados en usuarios como manager, editor, admin
. Así es como se guarda mi reclamo personalizado en mi Firebase Emulator Suite.
Para el usuario, las almejas personalizadas se configuran así {"role": "manager"}
, pero cada vez que intenté iniciar sesión y obtener el reclamo personalizado del usuario, no funcionó.
Solo para su información, traté de establecer reclamos personalizados como este también {"manager": true}
pero hasCustomClaim("manager")
siempre funciona si uso esto en condiciones if and else
incluso si configuro {"manager": false}
también si Intento iniciar sesión con privilegios de administrador, pero aún así el nivel de administrador funciona correctamente.
const adminOnly = () => hasCustomClaim("admin"); const editorOnly = () => hasCustomClaim("editor"); const managerOnly = () => hasCustomClaim("manager" ); const editorOnly2d = pipe(customClaims, map(claims => claims.role == "editor")); const mngOnly2 = pipe(customClaims, map(claims => claims.role == "manager"));
¿Cómo obtendré notificaciones personalizadas de usuarios registrados actuales para poder establecer rutas según la función del usuario?
Esto es lo que obtengo después de iniciar sesión authUser.getIdTokenResult(true)
aud: "testing" auth_time: 1629796111 email: "test12@gmail.com" email_verified:false exp: 1629799711 firebase: {identities: {…}, sign_in_provider: "password"} iat: 1629796111 iss: "https://securetoken.google.com/testing" role: "manager" name: "Testing" sub: "ZUlXd59HMhFI5gyozxW1xw0IXtPi" user_id: "ZUlXd59HMhFI5gyozxW1xw0IXtPi"
Traté de buscar el problema, pero todos sugieren lo mismo que usé anteriormente.
El {"role": "manager"}
no funcionará, porque hasCustomClaim("admin")
(por lo que puedo ver) solo verifica la existencia de un reclamo llamado admin
.
Eso también explica por qué funciona cuando usa "manager": false
, hasCustomClaim
simplemente verifica la presencia del reclamo independientemente de su valor. Los no administradores no deben tener un reclamo de admin
.
Por lo tanto, si desea utilizar las canalizaciones de AngularFire existentes, necesitará notificaciones que identifiquen si el usuario es un admin
, un editor
y/o un manager
.
Si desea utilizar su propio control de acceso basado en roles, también es posible, pero tendrá que implementar sus propios filtros de canalización de autenticación. Para esos, querrá comenzar registrando los claims
, para que pueda ver contra qué está trabajando su llamada de map
.