2013-06-12 232 views
14

是否可以在客户端使用Npm-Modules?流星Npm模块客户端?

更具体地说:

我想用node.js内置加密模块用于加密用户输入和密码,然后用签名(/ HMAC)发送加密的密码到我的服务器。

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

这是我做过什么:在包中创建

/密码/: -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})可以很容易地绕过

回答

2

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

如果你想使用一个文件一样的密码,你将不得不作出一个客户端的唯一版本,并把它放在你的流星应用的/client/lib

虽然这是可能的正式,流星不支持这个。

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

+0

好的,谢谢你的回答。 –

+2

许多npm模块被设计为可在服务器或客户端上使用,而不仅仅是服务器。 – protometa

+0

@protometa它可能是,但我不认为流星支持这个没有额外的第三方的东西,如browserify。流星所依赖的官方npm并不直接支持客户端模块,因此流星不能与客户端一起工作。您可以浏览它们并手动包含它们,就像您为其他任何nodejs项目一样。 – Akshat

13

您可以尝试从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'); 
}); 
+0

这可能不会工作,因为客户端文件的内容被包装在一个函数调用中,所以除非这些包明确地将自己添加到它们不可用的全局窗口对象中。 –

+0

这个解决方案在我打包的每个库中都工作得很好,因为它们全部(和其他99%)明确地将它们自己添加到全局窗口对象中。 – th0r

+0

谢谢...正在寻找更好的方法来做到这一点,但现在这会做。 –

1

您可以使用browserify建立一个.js文件捆绑了所有你想要在客户端的NPM模块。请参阅:

2013 Meteor NPM Packages

5

您可以使用https://github.com/elidoran/cosmos-browserify现在归档此。我之前使用过包装的包装,并且更新它们并创建新包装真的很痛苦。现在通过browserify支持,我可以用几行代码包含库。看他们的例子如何去做。我不会在这里发表,因为它可能是变化的主题。

+0

我试过这个,很简单,它运行良好。推荐的! 按照“在流星应用程序中使用”标题下的说明进行操作。 – joeytwiddle