15

是否可以在客户端使用 Npm-Modules?

进一步来说:

我想使用node.js内置的加密模块来加密用户输入的密码,然后将带有签名(/hmac)的加密密码发送到我的服务器。

我需要这样做,因为我必须能够在服务器端检索原始密码,因为之后我要将它发送到 ldap 服务器,因为用户应该使用与他相同的用户名/密码进行身份验证在该服务器上注册。

这就是我所做的:

在 packages/crypto/: -package.js 中创建:

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

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

它在服务器上运行良好,但在客户端上显示“参考错误:未定义 Npm”。那么,是否可以在客户端使用加密模块?

有没有其他方法可以实现这一目标?

谢谢!

编辑:有没有什么好的替代方法可以安全地获取服务器的密码,以便服务器可以检索原始密码?我认为在客户端执行 ldap() 请求(例如: if(checkLdap(usrname,password)){<login>} else{fail})可以轻松绕过?

4

4 回答 4

14

.npm您可以尝试从加密的包目录下的文件夹中添加客户端所需的 js 文件。因此,您的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');
});
于 2013-06-13T07:25:47.790 回答
5

您现在可以使用https://github.com/elidoran/cosmos-browserify来存档它。我以前使用过包装的包,更新它们并创建新的包真的很痛苦。现在有了 browserify 支持,我可以只包含几行代码的库。请参阅他们的示例如何做到这一点。我不在这里发布它,因为它可能会发生变化。

于 2015-06-17T05:45:27.870 回答
2

不可能在客户端使用 Npm 模块,因为 Npm 模块是通过 node.js 扩展的,它只在服务器端运行。

如果你想使用像加密这样的文件,你必须制作一个仅限客户端的版本并将其放入/client/lib你的 Meteor 应用程序中

虽然这可能正式可行,但 Meteor 不支持这一点。

您必须使用此项目手动包含 requirejs:https ://github.com/apendua/require

于 2013-06-12T15:22:12.853 回答
1

您可以使用 browserify 构建一个 .js 包,其中包含您在客户端需要的所有 Npm 模块。看:

2013 Meteor NPM 包

于 2013-09-06T19:59:19.930 回答