He configurado reglas básicas de seguridad de la base de datos en tiempo real de firebase para esta pregunta. Antes de saltar al problema, creé una aplicación móvil Flutter con GetX y también instalé el complemento http: ^0.13.4 para realizar consultas.
Así es como configuro las reglas de seguridad.
{ "rules":{ ".read" : "auth.uid !== null && auth.token.email_verified == true", ".write" : "auth.uid !== null" } }Básicamente, quiero que los usuarios puedan leer los datos si están autenticados y verificados por correo electrónico.
Y para la regla de escritura, solo si el usuario está autenticado y las notificaciones personalizadas de isAdmin se establecen en verdadero. Para isAdmin, no sé configurarlo en las reglas de seguridad.
¿Es algo como esto?
"auth.uid !== null && root.child('isAdmin').val() == true"De todos modos, mi problema es cómo consultar usando el complemento http en el lado del cliente. Aquí hay una muestra de la consulta GET
Uri url = Uri.parse('URL HERE with /.json file'); getIPTIdAndName() async { iptList.value = []; await http.get(url, headers: {"Authorization": FirebaseAuth.instance.currentUser!.uid}).then( (value) { var response = json.decode(value.body) as List<dynamic>; for (var i = 0; i < response.length; i++) { iptList.add({ "iptIndex": i, "iptId": response[i]['id'], "iptName": response[i]['name'] }); } iptList.refresh(); }, ); }¿Cómo consultar si las reglas de seguridad están establecidas?
código ACTUALIZADO
//create a function inside authController and called it inside the javascript Future<String> getIdToken() async{ return await FirebaseAuth.instance.currentUser!.getIdToken(); } getIPTIdAndName() async { iptList.value = []; Uri url = Uri.parse('$urlString?auth=${await auth.getIdToken()}'); await http.get(url).then( (value) { var response = json.decode(value.body) as List<dynamic>; for (var i = 0; i < response.length; i++) { iptList.add({ "iptIndex": i, "iptId": response[i]['id'], "iptName": response[i]['name'] }); } iptList.refresh(); }, ); } //security rules { "rules":{ ".read" : "auth != null && auth.token.email_verified == true", ".write" : "auth != null && auth.token.admin == true" } }Si Firebase aceptara el UID como un parámetro de URL, eso sería terriblemente inseguro, ya que cualquiera podría pasar su UID y obtener acceso a sus datos.
En su lugar, debe pasar el token de ID, que es una versión codificada de todos los datos del usuario, que los servidores de Firebase pueden decodificar y pasar la variable de auth a sus reglas.
Para obtener más información sobre esto, consulte la documentación sobre la autenticación de solicitudes a la API REST de Firebase Realtime Database , específicamente la sección sobre la autenticación con un token de ID .