4

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で問題ないように見えますが、少し厄介です!!

4

0 に答える 0