2013-06-12 33 views
14

Czy można używać modułów Npm po stronie klienta?Meteor Npm-moduł po stronie klienta?

Dokładniej:

chcę użyć node.js wbudowanym krypto-moduł do szyfrowania hasła użytkownik wprowadzi, a następnie wysłać zaszyfrowanego hasła z podpisem (/ HMAC) do mojego serwera.

Muszę to zrobić w ten sposób, ponieważ muszę być w stanie odzyskać pierwotny serwer po stronie hasła, ponieważ potem mam zamiar wysłać go do serwera LDAP, ponieważ użytkownik powinien uwierzytelnić się przy użyciu tej samej nazwy użytkownika/hasło, które jest zarejestrowane na tym serwerze.

To co zrobiłem:

stworzony w opakowaniach/crypto /: -package.js:

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

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

Współpracuje na serwerze, ale na kliencie jest napisane "Błąd odniesienia: Npm nie jest zdefiniowane". Czy możliwe jest użycie modułu kryptograficznego po stronie klienta?

Czy są jakieś alternatywy dla osiągnięcia tego celu?

Dziękujemy!

Edycja: Czy istnieje dobra alternatywa dla uzyskania hasła do serwera w bezpieczny sposób, aby serwer mógł odzyskać oryginalne hasło? myślę robi LDAP() - wniosek na stronie klienta (np: if(checkLdap(usrname,password)){<login>} else{fail}) można łatwo obejść

Odpowiedz

2

jej nie możliwe, aby korzystać z modułów NPM po stronie klienta, ponieważ moduły NPM są rozszerzeniami przez node.js który? działa tylko na koniec serwera.

Jeśli chcesz użyć pliku jak krypto trzeba by zrobić po stronie klienta tylko wersji i umieścić go w /client/lib swojej aplikacji Meteor

Choć może to być możliwe oficjalnie Meteor nie obsługuje tego.

Musisz ręcznie włączyć requirejs przy użyciu tego projektu: https://github.com/apendua/require

+0

OK dziękuję za odpowiedź. –

+2

Wiele modułów npm zostało zaprojektowanych do użycia na serwerze lub kliencie, a nie tylko na serwerze. – protometa

+0

@protometa to może być, ale nie sądzę, że Meteor obsługuje to bez dodatkowych elementów takich jak przeglądarka. Oficjalnie npm, od którego zależy meteor, nie obsługuje bezpośrednio modułów po stronie klienta, więc Meteor nie działa z nimi po stronie klienta. Możesz przeglądać je i ręcznie je uwzględnić, tak jak w przypadku każdego innego projektu nodejs. – Akshat

13

Możesz spróbować dodać potrzebne pliki js po stronie klienta z folderu .npm w katalogu pakietów crypto. Tak, plik package.js może wyglądać następująco:

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

To prawdopodobnie nie będzie działać, ponieważ zawartość plików klienta zostanie owinięta w wywołanie funkcji, więc chyba że pakiety te jawnie dodaj się do globalnego obiektu okna, który nie będzie dostępny. –

+0

To rozwiązanie działało dobrze z każdą biblioteką, którą zapakowałem do tej pory, ponieważ wszystkie z nich (i 99% innych) jawnie dodają się do globalnego obiektu okna. – th0r

+0

Dzięki ... szukałem lepszego sposobu na zrobienie tego, ale na razie to zrobię. –

1

Można użyć browserify zbudować js zawiniątko ze wszystkimi wszystkich modułów NPM chcesz po stronie klienta. Zobacz:

2013 Meteor NPM Packages

5

Można użyć https://github.com/elidoran/cosmos-browserify teraz zarchiwizować to. Użyłem wcześniej opakowanych pakietów i było prawdziwym bólem zaktualizować je i stworzyć nowe. Teraz dzięki obsłudze przeglądania mogę dołączyć bibliotekę z kilkoma liniami kodu. Zobacz ich przykład, jak to zrobić. Nie publikuję go tutaj, ponieważ może on ulec zmianie.

+0

Próbowałem tego, to było proste i działało dobrze. Zalecana! Postępuj zgodnie z instrukcjami pod nagłówkiem "Użyj w aplikacji Meteor". – joeytwiddle

Powiązane problemy