discover-meteor-wallpaper-with-logo

Meteor und die Packages Autopublish und Insecure

Von am 19.01.2016

Dieser Artikel dreht sich um eine kleine Kernproblematik bei dem JS Framework Meteor nämlich um publish,subscribe und call. Für Anfänger und Neueinsteiger in das Framework wirkt der Vorgang auf den ersten Blick verwirrend. Eine weitere Motivation für diesen Artikel ist, ich hatte dieselben Probleme und durchforstete Tutorials und Beiträge um den Prozess zu verstehen. Ganz wichtig Meteor liefert bei der App Erstellung die Pakete(Packages) insecure und autopublish. Diese zwei Pakte sind für den Entwicklungsprozess gedacht. Wenn die Applikation dann deployed werden soll, müssen diese zwei Pakete unbedingt entfernt werden um Sicherheitslücken zu schließen.

insecure

Dieses Package gibt die Möglichkeit die Collection(Datenbank) direkt vom Client zu bearbeiten. Hierbei ein nützlicher Link: https://www.meteor.com/tutorials/blaze/security-with-methods

autopublish

Dieses Paket schickt ununterbrochen alle Collection vom Server zum Client, deswegen kann der Client auf alle Daten in jedem Template zugreifen. Hierbei ein nützlicher Link: https://www.meteor.com/tutorials/blaze/publish-and-subscribe

Um einen Überblick zu schaffen hier eine kleine Grafik wie der Lebenszyklus für publish und subscribe aussieht:

client-server@2x

Damit der Client auf „subscriben“ kann muss die publish Methode am Server deklariert sein. Hier ein Code-Beispiel(in CoffeeScript), es werden alle Daten von der Collection Polls geholt.


Meteor.publish 'allPolls',

return Polls.find()

Dieser Code ist natürlich im Serverseitig, jetzt wird die Subscribe Methode auf der Clientseite gezeigt.

Template.polls_index.onCreated


@autorun

@subscribe('allPolls')

Wenn das Template erstellt wird, wird die autorun Methode ausgeführt und diese holt sich alle „Polls“ dann kann der Entwickler mit den „Polls“ weiterarbeiten (z.B.: die Polls ausgeben).

So werden publish und subscribe Prozesse ordnungsgemäß bei Meteor behandelt. Wenn jeder Anfrage von der Clientseite mit subscribe gelöst, wurde kann das autopublish Paket gelöscht werden und der Entwickler kann testen ob seine Abläufe funktionieren.

Zur nächsten Thema, um Daten in der Collection speichern zu können liefert Meteor sogenannte call Methoden mit. Diese Methoden organisieren auf der Serverseite die Datenverarbeitung und kommunizieren mit der Collection. Achtung zusätzlich in diesem Beispiel wird das Package Astronomy(http://astronomy.jagi.io/what-is-astronomy) verwendet.

Der Clientseitige Code, durch die call Methode wird der Zugriff auf den Server angefordert:

 


poll = new Poll {

title: @title

description: @description

duration: @duration

charttype: @charttype

ownerId: Meteor.userId()

}

$opt = $('input[class^="option"]')

$.each $opt, (index, v)

poll.push 'options_poll', optiontitle: $opt[index].value

Meteor.call('addPoll', poll)

Und auf der serverseitigen Seite, wird der Code folgend verarbeitet:


Meteor.methods

'addPoll': (poll)

if poll.validate()

poll.save()

FlowRouter.go('polls_index')

Return

Jetzt ist es möglich das Package insecure zu löschen und die Datenspeicherung funktioniert. Ich hoffe ich konnte einen Einblick Meteor und seinen Security Bereich geben.

The comments are closed.