Bha*_*ala 5 javascript encryption couchdb pouchdb ionic-framework
我目前正在使用PouchDB(客户端)和CouchDB(服务器端)开发混合移动应用程序来进行数据存储.在我决定对存储在PouchDB中的数据实施安全性之前,一切都运行得非常顺利.为此我使用transform-pouch,我在传入方法中加密数据并在传出方法中解密数据.
以下是使用过的代码段.
var transformFunctions = {
incoming: function(doc) {
Object.keys(doc).forEach(function(field) {
if (field !== '_id' && field !== '_rev' && field !== '_revisions') {
if (service.isJsonObject(doc[field])) {
doc[field] = CipherService.encrypt(JSON.stringify(doc[field]), "password");
} else {
doc[field] = CipherService.encrypt(doc[field], "password");
}
}
});
return doc;
},
outgoing: function(doc) {
Object.keys(doc).forEach(function(field) {
if (field !== '_id' && field !== '_rev' && field !== '_revisions') {
var decData = CipherService.decrypt(doc[field], "password");
if (service.isJsonString(decData)) {
doc[field] = JSON.parse(decData);
} else {
doc[field] = decData;
}
}
});
return doc;
}
};
service.commonDB.transform(transformFunctions);
Run Code Online (Sandbox Code Playgroud)
现在我面临的问题尤其出现在实时复制中,在传出函数中它正在获取已经解密的数据.我已经定义了PouchDB的更改事件.
localChanges = service.localDB.changes({
since: 'now',
live: 'true',
include_docs: true
}).on('change', function(change) {
var docData = change.doc;
if (!change.deleted) {
if (docData.endUser) {
$rootScope.$broadcast("endUser", docData);
} else {
$rootScope.$broadcast(docData._id, docData);
}
} else {
$rootScope.$apply(function() {
$rootScope.$broadcast('delete', docData._id);
});
}
}).on('paused', function(info) {
console.log(JSON.stringify(info));
}).on('error', function(err) {
console.log(err);
});
Run Code Online (Sandbox Code Playgroud)
由于我在解密期间在传出函数中出现错误.我无法理解传出函数如何获得已经解密的文档.
那么有关于实时复制的转换包有什么问题吗?有没有人遇到类似的问题?
我已经在应用程序启动时尝试了单次复制(单次)并且它工作正常.但是通过实时复制,它会产生问题.
请参阅下面的调试调用堆栈

我已经调试并确定黄色突出显示的函数正在将已解密的数据传递给传出函数.
因此,实时复制或PouchDB数据更改事件可能存在问题.
谁在那里救援?