google - Reglas de seguridad de Firebase: variable desconocida $ requestId2?
login google firebase (1)
Editar 2: Esta debería ser la solución:
-
.val()
ha sido agregado dentro de los paréntesis -
.exists()
permanece al final - Creé una lista separada de nombres de usuario (
/accepted-pending-usernames/
) para superar el error de comodín data
han sido reemplazados pornewData
".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:
- Compruebe si existe el nombre de usuario2
- 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:
- data.child (''username2'') ----> Line 9: child () espera un argumento de cadena.
- 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 ()