2

我正在尝试在流星 js 应用程序(流星版本 0.6.4.1)中包含一些 crypto.js 库。

当我将内容复制并粘贴到 server/main.js 文件中时,它工作正常,但这使得它非常不可读。

当我将库放在服务器目录中的单独文件中时(我也尝试将它们放在 lib 目录中),我收到错误消息ReferenceError: CryptoJS is not defined

server/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

3 回答 3

4

在您的应用程序目录中创建文件夹“packages/cryptojs”并放置文件:

  • hmac-sha256.js
  • enc-base64-min.js
  • 包.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']);
});

您需要修改hmac-sha256.js,将第 7 行的开头从:

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)

示例源

于 2013-07-27T06:25:10.097 回答
1

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

this.CryptoJS=this.CryptoJS

为其他cryptojs修复相同的问题。要与 Base64 一起使用,您必须确保在其他库之后加载 base64.js。

于 2013-11-07T01:52:54.873 回答
0

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

您也可以/compatibility通过删除varcryptojs 源文件中的 used 来使其工作而无需将其放入。问题是,如果您这样做,则更难使文件保持最新状态。

于 2013-07-26T21:25:00.183 回答