是否可以在客户端使用Npm-Modules?
更具体地说:
我想使用node.js
内置加密模块来加密用户输入的密码,然后将带有签名的加密密码(/ hmac)发送到我的服务器。
我需要这样做,因为我必须能够检索服务器端的原始密码,因为之后我将把它发送到ldap-server,因为用户应该使用相同的用户名进行身份验证/他在该服务器上注册的密码。
这就是我所做的:
在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})
可以轻松绕过吗?
答案 0 :(得分:14)
您可以尝试在crypto的包目录下的.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');
});
答案 1 :(得分:5)
您现在可以使用https://github.com/elidoran/cosmos-browserify对此进行归档。之前我使用过包装,更新它们并创建新包装真的很痛苦。现在有了browserify支持,我可以使用几行代码包含库。看看他们的例子如何做到这一点。我不会在这里发布,因为它可能会发生变化。
答案 2 :(得分:2)
在客户端无法使用Npm模块,因为Npm模块是node.js的扩展,只能在服务器端运行。
如果您想使用像crypto这样的文件,您必须制作一个仅限客户端的版本并将其放在Meteor应用程序的/client/lib
中
虽然这可能是正式的,但Meteor并不支持这一点。
您必须使用此项目手动包含requirejs:https://github.com/apendua/require
答案 3 :(得分:1)
您可以使用browserify构建一个.js包,其中包含您在客户端所需的所有Npm模块。参见: