如何在 Angular Ionic 中独立注入 Browserify Crypto

Posted

技术标签:

【中文标题】如何在 Angular Ionic 中独立注入 Browserify Crypto【英文标题】:How to independence inject Browserify Crypto in Angular Ionic 【发布时间】:2015-11-09 08:52:21 【问题描述】:

我是离子和棱角分明的新蜜蜂。我使用 Browserify 为我的 Ionic 项目需要 nodejs 的 Crypto 模块。以下是我的步骤:

    我在 app.js 文件中添加了新行

angular.module(.....).constant('Crypto',require('crypto'))

    我运行命令行,用 Crypto 模块的代码和 app.js 文件完美地创建新文件

浏览 app.js > bundle.js

    我在 index.html 文件中用 bundle.js 替换 app.js

    我尝试在 service.js 中测试它

angular.module('mapp.services').factory('abc',['$http','Crypto',function($http,Crypto) 返回 getAllProduct:function() console.log(Crypto.SHA256("Message")); ); ]);

它返回消息“Crypto.SHA256 不是函数”。我认为“常量”是指一个值,而不是静态对象,因此我不能将 Crypto 传递给“常量”。那么,如何通过 Browserify 在 app.js 文件中要求所有需要的模块,然后在其他 js 文件中使用它,例如 $http? 谢谢!

【问题讨论】:

如果您执行console.dir(Crypto) 而不是尝试调用可能不存在的函数,您可以在控制台中获得更有用的错误消息,这将让您看到@987654322 的实际javascript 对象@call 实际上是通过 browserify 注入到你的应用程序中的。 我添加了 console.dir(Crypto)。它返回“0 977846 目录”。这是什么意思?而且我认为如果我将其推送到“angular.module(.....).constant('Crypto',require('crypto'))”,系统只会将其视为简单值,对吗?跨度> 看起来它试图将包装器导入本机系统调用但失败了。基本上所有 Crypto 在服务器上所做的都是包装 OpenSSL,因此尝试将其转换为浏览器使用只是创建一个字符串,就像您使用文件指针和 not 可以执行实际加密功能的 Crypto 对象一样.您需要切换库以使您正在做的工作。 【参考方案1】:

抱歉,因为我的愚蠢问题。我们可以将 Crypto 对象分配给常量池的事实。问题是我的代码。要加密字符串,代码必须是

crypto.createHash('sha256').update(mystr).digest('base64');

而不是

crypto.sha256(mystr)

现在问题已解决,但感谢您的所有回复和 cmets。

【讨论】:

【参考方案2】:

我认为 Crypto 不能在客户端上运行,它是用于执行加密的服务器端库,主要是围绕 OpenSSL (see here) 的包装。

它封装的函数不能在 Ionic/Angular 中调用,原因很简单,它们在客户端上不可用。

尝试使用CryptoJS 代替this answer 提出的建议 - 它被设计为在您的 Ionic/Angular 项目中使用客户端来执行与加密相关的操作。

【讨论】:

我用过Browserify。 Browserify 只能转换纯 javascript 库以便在浏览器中使用,Crypto 依赖于用 C++ 编写的无法转换的服务器库。我认为 Crypto 不会与 browserify 一起使用。我建议尝试使用我链接的 CryptoJS 库或另一个具有您想要的功能的纯 JavaScript 库。 @supper aban:它也对我有用,CryptoJS 给了我错误的结果!

以上是关于如何在 Angular Ionic 中独立注入 Browserify Crypto的主要内容,如果未能解决你的问题,请参考以下文章

Angular 4 / Ionic 3 - 使用量角器创建模拟服务

在 Angular 项目中查找无用的依赖注入

为 Ionic/Angular 实现 Session Timeout 服务,每次新的用户交互都会重置 Timer

如何创建对象数组或使用模型,就像我们在 JSON 中一样 - Angular/Ionic

Angular2.3 自定义库和依赖注入

如何在 Ionic/Angular 中添加 OAuth facebook 登录?