Digamos que no quiero que mi cliente tenga acceso a una colección, pero sí quiero que mi cliente pueda hacer ciertas preguntas sobre los objetos dentro de esa colección. ¿Cómo lograría esto?Obtener valores del servidor
Como ejemplo, digamos que quiero saber si actualmente hay un usuario conectado. Cuando un usuario inicia sesión por primera vez, configuro la identificación de la base de datos de ese usuario en Session
y en una cookie. Actualmente, la aplicación dice un usuario se registra en si !Session.equals("user_id", null)
, que por supuesto es muy inseguro porque ahora puedo abrir Firebug y decir Session.set("user_id", "foo")
y ahora estoy conectado.
no quiero que el cliente tenga acceso a la colección de usuarios en este punto. El único código de cliente que tiene acceso a esta colección está encerrado en una función autoejecutable en un esfuerzo por protegerlo (no estoy muy seguro de si esa es la manera correcta de hacer la seguridad en Meteor, así que siéntase libre de recomendar algo en esa línea también). Así que, en cambio, me gustaría llamar a algún código del lado del servidor y pasarle el ID que está en sesión y hacer que me diga si ese es un usuario válido o no.
Así es como me gustaría ver que la configuración:
// client
function logged_in() {
return SomeServerMethodThatValidatesUserId(Session.get("user_id"));
}
Meteor.methods
no parece ajustarse a la ley, ya que Meteor.call
realiza una devolución de llamada asincrónica. El modelo de pub/sub se ve un poco más prometedor, pero a partir de la documentación, no estoy muy seguro de cómo funciona.
Parece sugerir que debo llamar al this.set
desde el controlador de publicación para establecer algunos valores en el cliente, pero no puedo determinar dónde están disponibles esos valores.
O tal vez el modelo de pub/sub no es el adecuado para esto y hay otra manera en la que me estoy perdiendo. ¡Cualquier consejo es apreciado!
Echa un vistazo a esta respuesta de uno de los desarrolladores de Meteor: http: // stackoverflow.com/questions/10115042/how-do-you-secure-the-client-side-mongodb-api/10116342 # 10116342 Muestra cómo desactivar las "ruedas de entrenamiento" predeterminadas que permiten al cliente y al servidor ejecutar comandos de mongo arbitrarios. Luego, puede exponer solo lo que desea al cliente a través de Meteor.methods y Meteor.publish. Esto se simplificará cuando se libere el paquete de autenticación Meteor. – rmarscher