studio reglas google auth firebase firebase-database firebase-security

google - Reglas de seguridad de Firebase: variable desconocida $ requestId2?



login google firebase (1)

Editar 2: Esta debería ser la solución:

  1. .val() ha sido agregado dentro de los paréntesis
  2. .exists() permanece al final
  3. Creé una lista separada de nombres de usuario ( /accepted-pending-usernames/ ) para superar el error de comodín
  4. data han sido reemplazados por newData

    ".write": "auth!=null && newData.child(''username2'').val() == true && root.child(''usernames-list'').child( newData.child(''username2'').val() ).exists() && !root.child(''user-requests'').child( auth.uId ).child(''accepted-pending'').child(''accepted-pending-usernames'').child( data.child(''username2'').val() ).exists()"

Nota: La pregunta aún puede permanecer sin resolverse ya que no está claro si firebase le permite a uno usar múltiples comodines en las reglas

Cuando usuario1 -> usuario2 (usuario1 envía una solicitud a usuario2). Estoy tratando de realizar ciertos controles usando las reglas de Firebase, que son:

  1. Compruebe si existe el nombre de usuario2
  2. Comprueba si ambos usuarios ya no son amigos

para eso he escrito la siguiente regla:

{ "rules": { "requests": { "$requestId": { ".read": "auth != null", ".write": "auth!=null && data.child(''username2'').val() == true && root.child(''usernames-list'').child( data.child(''username2'') ).exists() && !root.child(''user-requests'').child( auth.uId ).child(''accepted-pending'').child($requestId2).child( data.child(''username2'') ).exists()" } } } }

Pero devuelve los siguientes errores en dos áreas:

  1. data.child (''username2'') ----> Line 9: child () espera un argumento de cadena.
  2. data.child ($ requestId2) ----> Línea 9: variable desconocida $ requestId2

Estructura de datos:

requests ---$requestId ---key: value user-requests ---$userId ---pending ---$requestId ---key: value ---accepted ---$requestId ---key: value ---rejected ---$requestId ---key: value ---unfriend ---$requestId ---key: value ---accepted-pending ---$requestId ---key: value

Json entrante:

user1 --> authId of user1 username1 --> username of 1st user username2 --> username of 2nd user ...

Nota 1: he intentado usar newData. en lugar de data. y aún recibes los mismos errores Además, newData(''username2'').isString() también devuelve el mismo error

Nota 2: podría evitar el $requestId2 (error) haciendo una lista separada que solo contenga los nombres de usuario con los que el usuario 1 es amigo y compárelo con eso; pero aún necesitaría poder usar data.(''username2'') como un campo dentro del root.child()

Editar 1: la siguiente regla se publica con éxito, sin embargo, no estoy seguro si sigue haciendo lo que he mencionado (necesito verificar):

".write": "auth!=null && newData.child(''username2'').val() == true && root.child(''usernames-list'').hasChild( newData.child(''username2'').val() ) && !root.child(''user-requests'').child( auth.uId ).child(''accepted-pending-usernames'').hasChild( data.child(''username2'').val() )"

Ref: Firebase security - newData () como parámetro de la expresión hasChildren ()