Meteor - Publicar e Assinar

Conforme já discutido no capítulo Cobranças, todos os nossos dados estão disponíveis no lado do cliente. Este é um problema de segurança que pode ser tratado com métodos de publicação e assinatura.

Removendo Autopublish

Neste exemplo, usaremos PlayersCollectioncoleta com os seguintes dados. Preparamos esta coleção antes para poder nos concentrar no capítulo em si. Se você não tem certeza de como criar coleções MongoDB no aplicativo meteoro, verifique nosso capítulo de coleções .

Para proteger nossos dados, precisamos remover autopublish pacote que estava nos permitindo usar os dados do lado do cliente.

C:\Users\username\Desktop\meteorApp>meteor remove autopublish

Após esta etapa, não seremos capazes de obter os dados do banco de dados do lado do cliente. Só poderemos vê-lo do lado do servidor na janela do prompt de comando. Verifique o seguinte código -

meteorApp.js

var PlayersCollection = new Mongo.Collection('playersCollection');
var myLog = PlayersCollection.find().fetch();
console.log(myLog);

o command prompt janela irá mostrar toda a coleção com quatro objetos, enquanto o developers consoleirá mostrar uma matriz vazia. Agora nosso aplicativo está mais seguro.

Usando Publicar e Assinar

Digamos que queremos permitir que os clientes usem nossos dados. Para isso, precisamos criarMeteor.publish()método no servidor. Este método enviará os dados ao cliente.

Para poder receber e usar esses dados no lado do cliente, vamos criar Meteor.subscribe()método. No final do exemplo, estamos pesquisando o banco de dados. Este código está sendo executado no cliente e no servidor.

var PlayersCollection = new Mongo.Collection('playersCollection');

if(Meteor.isServer) {

   Meteor.publish('allowedData', function() {
      return PlayersCollection.find();
   })
}

if (Meteor.isClient) {
   Meteor.subscribe('allowedData');
};

Meteor.setTimeout(function() {
   var myLog = PlayersCollection.find().fetch();
   console.log(myLog);
}, 1000);

Podemos ver que nossos dados são registrados tanto no developers console e a command prompt janela.

Filtrando Dados do Cliente

Também podemos publicar parte dos dados. Neste exemplo, estamos publicando dados comname = "John".

var PlayersCollection = new Mongo.Collection('playersCollection');

if(Meteor.isServer) {

   Meteor.publish('allowedData', function() {
      return PlayersCollection.find({name: "John"});
   })
}

if (Meteor.isClient) {
   Meteor.subscribe('allowedData');
};

Meteor.setTimeout(function() {
   myLog = PlayersCollection.find().fetch();
   console.log(myLog);
}, 1000);

Depois de executar este código, o command prompt irá registrar todos os dados, enquanto o lado do cliente console irá apenas registrar dois objetos com o nome John.