Einstieg in die Entwicklung von Web-Apps mit Meteor

Absichern und verteilen

Sicherheit und Authentifizierung

Meteor definiert nicht nur die Applikationsstruktur, sondern bietet auch eine Reihe vordefinierter Basisdienste. Ein gutes Beispiel hierfür ist das Log-in-System. Es stellt eine vordefinierte Benutzeroberfläche und alle wichtigen Grundfunktionen für eine Benutzer-Authentifizierung bereit:

  • Registrieren
  • An- und Abmelden
  • Passwörter per E-Mail zurücksetzen

Beeindruckend ist ebenfalls die Liste der zusätzlichen externen Log-in-Provider. Entwickler haben die Qual der Wahl: Von GitHub über Twitter und Facebook bis zu Google sind fast alle namhaften Anbieter vertreten, ihre Verwendung und Integration in die eigene Anwendung lässt sich vergleichsweise einfach konfigurieren. Weitere Provider, die den OAuth2-Standard unterstützen, lassen sich ebenfalls im Handumdrehen einbinden.

Das Meteor-Package nutzt das "Secure Remote Password"-Protokoll (SRP) für die Kommunikation mit den externen Providern: Passwörter werden nur verschlüsselt, nie im Klartext übertragen. Über die Meteor-Konsole fügt der add-Befehl das Package dem Projekt hinzu:

$ meteor add accounts-ui
$ meteor add accounts-*
(* = password, facebook, twitter, google, github, ...)

Für die Applikation ist es notwendig, die Provider in der Datei clients.js zu konfigurieren. Das Beispiel definiert GitHub und Google als alternative Log-in-Provider, wobei je nach Anbieter weitere Einstellungen möglich sind:

Accounts.ui.config({
requestPermissions: {
github: ['user', 'repo']
},
requestOfflineToken: {
google: true
},
passwordSignupFields: 'USERNAME_AND_OPTIONAL_EMAIL'
});

Als letzter Schritt soll der Log-in-Button in der Maske erscheinen. Hierfür definiert das Accounts- UI-Package eine Funktion, die sich leicht in den Templates nutzen lässt:

{{login-buttons}}

Handlebars rendert damit einen vordefinierten Anmeldebereich, in dem alle Log-in-Provider aufgelistet sind, die in der Konfiguration auftauchen. In den Views ist es meist notwendig, einen Bereich nur für bestätigte Benutzer sichtbar zu machen. Dafür kann man in den Templates prüfen, ob ein Benutzer angemeldet ist. Das Abfragen des Nutzerstatus zeigte das oben aufgeführte Beispiel im Bereich Templating.

Vor dem Einsatz muss man die eigene Applikation beim gewünschten Provider anmelden. Am leichtesten geht das, indem man den Provider wie in der Meteor-Dokumentation konfiguriert und erstmalig aufruft. Daraufhin erscheint ein Pop-up mit Schritten zur Konfiguration des Dienstes. Typischerweise erhält man eine Client-Identifikation und einen Schlüssel, die die eigene Applikation identifizieren und beim ersten Login anzugeben sind. Nach der erstmaligen Einstellung erscheint beim Anmelden die typische Log-in-Seite des gewählten Anbieters, oder man wird, sofern man bereits beim entsprechenden OAuth2-Provider angemeldet ist und seine Applikation autorisiert hat, direkt eingeloggt.

Deployment und Packaging

Genauso einfach wie das Installieren und Erzeugen des ersten eignen Projekts, ist die Veröffentlichung einer Applikation. Meteor stellt hierzu seine eigene Infrastruktur zur Verfügung und erlaubt das Deployment eines Projekts unter einer Subdomain von meteor.com mit nur einer Kommandozeile:

$ meteor deploy pokerquiz.meteor.com

Weitere Optionen, wie einen Passwortschutz für das Deployment oder das Löschen der Applikation, stehen mit verschiedenen Kommandozeilen-Parametern zur Verfügung.

Möchte man nicht unter *.meteor.com sondern unter der eigenen Domain erreichbar sein, ist das ebenfalls unter der Nutzung der Meteor-Infrastruktur möglich. Hierzu muss in der Domain-Konfiguration der eigenen Domäne nur der DNS-A-Eintrag auf die IP-Adresse von origin.meteor.com zeigen.

Sind der Nutzung der Meteor-Infrastruktur Riegel vorgeschoben oder möchte man ein gänzlich eigenes System betreiben, benötigt man zunächst einen regulären Node.js-Server und MongoDB. Mit dem bundle-Kommando packt Meteor alle zum Betrieb einer Meteor-Applikation notwendigen Ressourcen in ein Tarball-Verzeichnis zusammen, das sich dann in der eigenen Infrastruktur installieren lässt.

$ meteor bundle pokerquiz.tgz

Im Anschluss sind allerdings weitere Einstellungen zum Betrieb des Servers hinsichtlich Logging, Monitoring, Performance et cetera notwendig.

Was gibt es sonst noch?

Im Node.js-Umfeld haben Entwickler über Node Packaged Modules (npm) Zugriff auf scheinbar unbegrenzte Mengen an Bibliotheken, die teils mehr, teils weniger nützlich sind. Doch wie sieht es bei einer noch recht jungen Plattform wie Meteor aus?

Da Meteor auf Node.js aufsetzt, ist es theoretisch möglich, jede für Node.js zur Verfügung stehende
Bibliothek in Meteor zu nutzen. Hierzu ist für den offiziellen Weg die Bibliothek nur neu zu packen und eine Smart- beziehungsweise Package-JSON-Konfigurationsdatei für die Nutzung in Meteor zu integrieren. Inoffiziell gibt es eine Möglichkeit, npm-Packages direkt in Meteor zu verwenden: Mit der Kommandozeilenerweiterung Meteorite lassen sich eigene Packages von einem GitHub-Verzeichnis in Meteor integrieren. Meteorite schrumpft das Schlüsselwort der Befehle der Plattform auf mrt und stellt ansonsten alle Meteor-Kommandos und noch ein paar zusätzliche, eigene Befehle zur Verfügung.

Ein ständig wachsendes und von der Meteor-Community unterstütztes Verzeichnis ist zudem unter dem Namen Atmosphere verfügbar und bietet interessante und nützliche Erweiterungen. Teilweise haben es einzelne Atmosphere-Packages auch schon in den Meteor-Core-Code geschafft.

Trotz der erst kurzen Zeit, die Meteor verfügbar ist, gibt es zahlreiche Websites mit Tipps und Tricks rund um die Plattform. Die Dokumentation auf der Meteor-Website kann sich sehen lassen und gibt eine gute Hilfestellung bei der täglichen Arbeit. Wem das immer noch nicht genügt oder wer weitere Fragen hat, wird häufig auf der Mailing-Liste fündig oder erhält dort Antwort aus der Meteor-Entwicklergemeinde. Auch bei Stackoverflow sind unter dem Tag "meteor" zahlreiche Einträge zu finden.