繁体   English   中英

在流星中使用Crypto.js

[英]Using Crypto.js in meteor

我正在尝试在流星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){...

使其全球化,但这也行不通。 如何正确包含此库?

在您的应用程序目录中,创建文件夹“ packages / 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)

来源示例

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

this.CryptoJS=this.CryptoJS

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

发生这种情况的原因是流星的作用域可变。 尝试将cryptojs库文件放在/server/compatibility 这样,可以在其他文件中访问cryptojs库。

您也可以通过删除cryptojs源文件中使用的var来使其工作而无需将其放在/compatibility中。 问题是,如果执行此操作,则很难使文件保持最新状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM