2013-06-12 7 views
14

Ist es möglich, Npm-Module auf der Client-Seite zu verwenden?Meteor Npm-Modul Client-Seite?

Genauer gesagt:

Ich möchte zum Verschlüsseln eines Passworts node.js Einbau-Kryptomodul verwenden, die der Benutzer eingibt und dann mit einer Signatur (/ hmac) auf meinem Server das verschlüsselte Passwort.

Ich muss es so machen, weil ich in der Lage sein muss, das ursprüngliche Passwort serverseitig abzurufen, denn danach werde ich es an einen LDAP-Server senden, da sich der Benutzer mit demselben Benutzernamen authentifizieren soll/Passwort, mit dem er auf diesem Server registriert ist.

Das ist, was ich tat:

in Paketen erstellt/Krypto /: -package.js:

Package.on_use(function(api) { api.add_files('crypto.js',['server','client']);});

-crypto.js: crypto = Npm.require("crypto");

Es funktioniert gut auf dem Server, aber auf dem Client heißt es "Referenzfehler: Npm ist nicht definiert". Also, ist es möglich, das Crypto-Modul auf der Client-Seite zu verwenden?

Gibt es Alternativen, um dieses Ziel zu erreichen?

Vielen Dank!

Bearbeiten: Gibt es eine gute Alternative, um das Passwort auf dem Server auf sichere Weise zu erhalten, so dass der Server das ursprüngliche Passwort abrufen kann? Anfrage auf der Client-Seite (wie - Ich denke, die ldap() tun: if(checkLdap(usrname,password)){<login>} else{fail}) kann leicht umgangen werden

Antwort

2

Es ist nicht möglich Npm Module auf der Clientseite zu verwenden, da Npm Module Erweiterungen über node.js sind die? nur läuft auf dem Server Ende.

Wenn Sie eine Datei wie Krypto verwenden möchten würden Sie eine Client-Seite nur Version und es

in /client/lib Ihrer Meteor App machen müssen setzen Während dies offiziell möglich sein kann, Meteor unterstützt das nicht.

würden Sie müssen requirejs manuell dieses Projekt sind mit: https://github.com/apendua/require

+0

Okay danke für Ihre Antwort. –

+2

Viele npm-Module sind so konzipiert, dass sie entweder auf dem Server oder Client und nicht nur auf dem Server verwendet werden können. – protometa

+0

@ Protometa kann es sein, aber ich denke nicht Meteor unterstützt dies ohne zusätzliche Drittanbieter-Sachen wie browserify. Offiziell npm, von dem der Meteor abhängig ist, unterstützt nicht direkt clientseitige Module, daher arbeitet Meteor nicht mit ihnen clientseitig zusammen. Sie können sie browserisieren und manuell hinzufügen, wie Sie es für jedes andere nodejs-Projekt tun würden. – Akshat

13

Sie können versuchen, die js-Dateien benötigen Sie auf Client-Seite aus .npm Ordner unter Kryptopaket Verzeichnis hinzuzufügen. Also, Ihre package.js Datei könnte wie folgt aussehen:

Package.describe({ 
    summary: 'Description of your crypto package' 
}); 

Npm.depends({ 
    'crypto': '1.0.0' 
}); 

Package.on_use(function (api) { 
    api.add_files('crypto.js', 'server'); 
    api.add_files('.npm/node_modules/crypto/crypto.js', 'client'); 
}); 
+0

Dies wird wahrscheinlich nicht funktionieren, da der Inhalt der Client-Dateien in einem Funktionsaufruf verpackt werden, so dass diese Pakete nicht explizit fügen Sie sich dem globalen Fensterobjekt hinzu, das sie nicht verfügbar sind. –

+0

Diese Lösung funktionierte gut mit jeder Bibliothek, die ich bisher packte, weil sie alle (und imho 99% der anderen) explizit das globale Fensterobjekt hinzufügen. – th0r

+0

Danke ... war auf der Suche nach einem besseren Weg, dies zu tun, aber das wird für jetzt tun. –

1

Sie browserify verwenden können, ein Js-Bundle mit allen allen Npm Module, die Sie auf der Client-Seite bauen wollen. Siehe:

2013 Meteor NPM Packages

5

Sie https://github.com/elidoran/cosmos-browserify jetzt diese zu archivieren können. Ich habe vorher eingepackte Pakete benutzt und es war echt schwer sie zu aktualisieren und neue zu erstellen. Jetzt mit der Unterstützung von browserify kann ich eine Bibliothek mit nur einigen Zeilen Code einfügen. Sehen Sie ihr Beispiel, wie es geht. Ich veröffentliche es hier nicht, da es sich ändern könnte.

+0

Ich habe das versucht, es war einfach und es hat gut funktioniert. Empfohlen! Befolgen Sie die Anweisungen unter der Überschrift "Verwenden in einer Meteor App". – joeytwiddle