Как в Backbone.JS шифровать данные? Разрабатываю desktop приложение на BackboneJS. Для сборки используется NW.JS. Все данные хранятся в WebSQL. Как можно зашифровать данные в БД? Переопределить sync и fetch и там шифровать? Либо есть какой-то более удобный метод? Если переопределять sync и fetch, то как это лучше сделать, что бы применилось ко всем моделям и коллекциям в приложении.
Для шифрования данных в Backbone.JS вы можете использовать библиотеку CryptoJS, которая предоставляет широкий набор алгоритмов шифрования.
Чтобы зашифровать данные перед сохранением и расшифровать их при загрузке из БД, вы действительно можете переопределить методы sync и fetch в моделях и коллекциях.
Вы можете создать базовую модель и коллекцию, в которых переопределить sync и fetch, и затем расширить все остальные модели и коллекции от этих базовых. Вот пример кода:
// базовая модель с шифрованием данных var EncryptedModel = Backbone.Model.extend({ sync: function(method, model, options) { if (method === 'create' || method === 'update') { // шифруем данные перед сохранением model.set('encryptedData', CryptoJS.AES.encrypt(model.toJSON(), 'secret')); } Backbone.Model.prototype.sync.apply(this, arguments); } }); // базовая коллекция с расшифровкой данных var EncryptedCollection = Backbone.Collection.extend({ model: EncryptedModel, fetch: function(options) { Backbone.Collection.prototype.fetch.apply(this, arguments); // расшифровываем данные после загрузки this.each(function(model) { var decryptedData = CryptoJS.AES.decrypt(model.get('encryptedData'), 'secret'); model.clear({silent: true}).set(JSON.parse(decryptedData.toString(CryptoJS.enc.Utf8))); }); } }); // пример использования базовой модели и коллекции var MyModel = EncryptedModel.extend({ // ваш код модели }); var MyCollection = EncryptedCollection.extend({ // ваш код коллекции });
Таким образом, при сохранении данных они будут автоматически зашифрованы, а при загрузке - расшифрованы. Расширив остальные модели и коллекции от базовых, вы будете иметь возможность применить шифрование ко всем данным в вашем приложении.
Для шифрования данных в Backbone.JS вы можете использовать библиотеку CryptoJS, которая предоставляет широкий набор алгоритмов шифрования.
Чтобы зашифровать данные перед сохранением и расшифровать их при загрузке из БД, вы действительно можете переопределить методы sync и fetch в моделях и коллекциях.
Вы можете создать базовую модель и коллекцию, в которых переопределить sync и fetch, и затем расширить все остальные модели и коллекции от этих базовых. Вот пример кода:
// базовая модель с шифрованием данныхvar EncryptedModel = Backbone.Model.extend({
sync: function(method, model, options) {
if (method === 'create' || method === 'update') {
// шифруем данные перед сохранением
model.set('encryptedData', CryptoJS.AES.encrypt(model.toJSON(), 'secret'));
}
Backbone.Model.prototype.sync.apply(this, arguments);
}
});
// базовая коллекция с расшифровкой данных
var EncryptedCollection = Backbone.Collection.extend({
model: EncryptedModel,
fetch: function(options) {
Backbone.Collection.prototype.fetch.apply(this, arguments);
// расшифровываем данные после загрузки
this.each(function(model) {
var decryptedData = CryptoJS.AES.decrypt(model.get('encryptedData'), 'secret');
model.clear({silent: true}).set(JSON.parse(decryptedData.toString(CryptoJS.enc.Utf8)));
});
}
});
// пример использования базовой модели и коллекции
var MyModel = EncryptedModel.extend({
// ваш код модели
});
var MyCollection = EncryptedCollection.extend({
// ваш код коллекции
});
Таким образом, при сохранении данных они будут автоматически зашифрованы, а при загрузке - расшифрованы. Расширив остальные модели и коллекции от базовых, вы будете иметь возможность применить шифрование ко всем данным в вашем приложении.