2013-07-26 101 views
2

我想在流星js应用程序中包含一些crypto.js库(流星版本0.6.4.1)。在流星中使用Crypto.js

当我复制的内容粘贴到服务器/ main.js文件,它工作正常,但是这使得它非常不可读。

当我把库放在服务器目录中的单独文件中(我也尝试将它们放在lib目录中),我得到错误ReferenceError: CryptoJS is not defined。服务器/ main.js的

要旨:

Meteor.methods({ 
    encrypt:function(bundleID){ 
     return CryptoJS.HmacSHA256(string, 'something'); 
    } 
}); 

我还试图改变HMAC-sha256.js文件的第一行从

var CryptoJS=CryptoJS||function(h,s){... 

到:

CryptoJS=CryptoJS||function(h,s){... 

使其成为全球,但这也没有奏效。如何正确包含此库?

回答

4

在你的应用程序目录创建文件夹 '包/ cryptojs',并把那里的文件:

  • HMAC-sha256.js
  • ENC-的base64 min.js
  • package.js

包/ cryptojs/package.js

Package.describe({ 
    summary: "CryptoJS" 
}); 

Package.on_use(function (api, where) { 
    api.add_files(['hmac-sha256.js'], ['client','server']); 
    api.add_files(['enc-base64-min.js'], ['client','server']); 
}); 

你需要通过改变线路7月初修改HMAC-sha256.js

var CryptoJS=CryptoJS||function(h,s){ 

到:

CryptoJS=function(h,s){ 

之后,你可以使用它:

var hash = CryptoJS.HmacSHA256("Message", "secret"); 
var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);  
console.log(hashInBase64) 

Example source

+1

所以这确实在本地工作,但当我最终推到heroku(使用此构建包:https://github.com/v8squirrel/heroku-buildpack-meteor)该应用程序崩溃与此错误:ReferenceError:包未定义'。当我将加密文件的内容粘贴到我的server.js文件的底部时,它会在heroku上运行。 –

0

发生这种情况的原因是由于流星中的变量范围。尝试将cryptojs库文件放入/server/compatibility。这样cryptojs库可以在其他文件中访问。

您也可以通过删除cryptojs源文件中使用的var而不通过/compatibility来获得它的工作。事情是,如果你这样做更难以保持文件最新。

+0

将它们放在'/ server/compatibility'中不起作用。该文档只提到'/客户端/兼容性(也试过了,没有工作)。也许它不适用于两者? –

+0

尝试'/ compatibility'来查看它是否有效?那么在每个JS文件中从'var CryptoJS'中移除'var'怎么办? – Akshat

1

我作为parhelium的指南,但仍然无法正常工作,然后我找到了解决此问题的新方法: 只需将hmac-sha512中的第7行替换即可。JS这一个全球化CryptoJS对象:

this.CryptoJS=this.CryptoJS

修复同样为其他cryptojs。要使用Base64,您必须确保base64.js在其他库之后加载。