angular app で Index DB を暗号化するために、YDN DB ファイル (ydn-db-isw-core-crypt-qry-dev.js) をインクルードしました。ローダーの spinner.head セクションには、plivo.min.js ライブラリが含まれています。
<script type="text/javascript" src="./assets/ydnCoreCryptQryDev.js"></script>
以前はプレーンな IndexDB を使用していましたが、順調に進んでいましたが、コレクションの詳細は開発者ツールに表示されていました。
YDN DBを組み込んだ後、ウィンドウセッションストレージにユーザー資格情報を設定し、DBの初期化を完了した後、ホームページをロードし続けます。
DB初期化コードは -
function open() {
var deferred = $q.defer();
var options = {
Encryption: {
encryptKey: false, // optional encrypt primary key
secrets: [{
name: 'dddd',
key: 'xxxxxxxxxx'
}]
}
};
var schema = {
stores:[{
name:'profile',
encrypted: true
},{
name:'contacts',
encrypted: true
},{
name:'archive',
encrypted: true
},{
name:'avatars',
encrypted: true
},{
name:'groups',
encrypted: true
},{
name:'notifications',
encrypted: true
}]
};
var db = new ydn.db.Storage('nowconferdb', schema, options);
db.onReady(function() {
console.log('DB is initialized');
avatarstorage.setDB(db);
contactstorage.setDB(db);
profilestorage.setDB(db);
groupstorage.setDB(db);
archivestorage.setDB(db);
notificationstorage.setDB(db);
deferred.resolve(true);
});
db.addEventListener('fail', function (event) {
var err = event.getError();
if (err.name == 'versionchange') {
console.log('The application is updated, please refresh to upgrade.');
avatarstorage.setup(db);
contactstorage.setup(db);
profilestorage.setup(db);
groupstorage.setup(db);
archivestorage.setup(db);
notificationstorage.setup(db);
} else {
console.log('connection failed with ' + err.name + ' by ' + err.message);
db = null; // no operation can be placed to the database instance
}
deferred.reject(false);
});
return deferred.promise;
}
この後、実行されていないものを実行する必要があります。DBを複数のサービスに渡して使用します。-
storageservice.open().then(function() {
console.log('post initializing storageservice'); // <<<<
if (me.getAuth()) {
console.log('user is authenticated'); // <<<<
me.loadMe(sessionUser._id).then(function(profile) {
me.setMe(angular.extend(profile, sessionUser)).then(function() {
console.log('setting user');
deferred.resolve();
},
function() {
deferred.reject(1);
});
}, function() {
me.setMe(sessionUser).then(function() {
console.log('setting user info');
deferred.resolve();
}, function() {
deferred.reject(1);
});
});
}
else {
console.log('user is not authenticated');
me.loadMe(sessionUser._id).then(function(profile) {
console.log('loaded profile:'+JSON.stringify(profile));
deferred.resolve(profile);
}, function() {
me.setMe(sessionUser).then(function() {
console.log('setting user details');
deferred.resolve();
}, function() {
console.log('failed to set user');
deferred.reject(1);
});
});
}
});
誰か助けてくれませんか。
どうもありがとう。
アップデート -
deferred.promise の代わりにコールバック アプローチを使用し、コードが次のブロックの実行を開始しました (「ストレージ サービスの初期化後」、「ユーザーが認証された」のコンソールを取得します)。
すべてがdeferred.promiseで問題ないように見えますが、少し厄介です!!