Клиент-клиент Meteor Npm-module?

Можно ли использовать Npm-модули на стороне клиента?

Более конкретно:

Я хочу использовать встроенный крипто-модуль node.js для шифрования пароля, который вводит пользователь, а затем отправить зашифрованный пароль с сигнатурой (/hmac) на мой сервер.

Мне нужно сделать это так, потому что я должен иметь возможность получить исходный пароль на стороне сервера, потому что после этого я отправлю его на ldap-сервер, потому что пользователь должен пройти аутентификацию с тем же именем пользователя/пароль, который он зарегистрировал на этом сервере.

Это то, что я сделал:

созданный в пакетах /crypto/: -package.js:

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

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

Он отлично работает на сервере, но на клиенте он говорит "Reference Error: Npm is not defined". Итак, можно ли использовать крипто-модуль на стороне клиента?

Есть ли альтернативы для достижения этой цели?

Спасибо!

Изменить: Есть ли хорошая альтернатива для безопасного доступа к серверу на сервере, чтобы сервер мог получить исходный пароль? Я думаю, что делать ldap() - запрос на стороне клиента (например: if(checkLdap(usrname,password)){<login>} else{fail}) можно легко обойти?

Ответы

Ответ 1

Невозможно использовать модули Npm на стороне клиента, поскольку модули Npm являются расширениями через node.js, который работает только на сервере.

Если вы хотите использовать такой файл, как crypto, вам нужно будет сделать только версию на стороне клиента и поместить его в /client/lib вашего приложения Meteor

Хотя это может быть возможно официально, Meteor не поддерживает это.

Вам нужно будет включить requirejs вручную, используя этот проект: https://github.com/apendua/require

Ответ 2

Вы можете попробовать добавить js файлы, которые вам нужны на стороне клиента из папки .npm в каталоге crypto package. Итак, ваш файл package.js может выглядеть так:

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');
});

Ответ 3

Теперь вы можете использовать https://github.com/elidoran/cosmos-browserify, чтобы архивировать это. Раньше я использовал упакованные пакеты, и было настоящей болью обновлять их и создавать новые. Теперь с поддержкой браузера я могу включить библиотеку с несколькими строками кода. Посмотрите их пример, как это сделать. Я не публикую его здесь, поскольку это может быть предметом перемен.

Ответ 4

Вы можете использовать браузер для создания пакета .js со всеми всеми модулями Npm, которые вы хотите на стороне клиента. См:

2013 Meteor NPM Packages