2013-07-26 98 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在其他庫之後加載。