diff --git a/client/components/Reader/ServerStorage/ServerStorage.vue b/client/components/Reader/ServerStorage/ServerStorage.vue index 24f4b78b..a2eba6b5 100644 --- a/client/components/Reader/ServerStorage/ServerStorage.vue +++ b/client/components/Reader/ServerStorage/ServerStorage.vue @@ -22,10 +22,12 @@ const ssCacheStore = localForage.createInstance({ const componentOptions = { watch: { serverSyncEnabled: function() { - this.serverSyncEnabledChanged(); + if (this.inited) + this.serverSyncEnabledChanged(); }, serverStorageKey: function() { - this.serverStorageKeyChanged(true); + if (this.inited) + this.serverStorageKeyChanged(true); }, settings: function() { this.debouncedSaveSettings(); @@ -85,6 +87,13 @@ class ServerStorage { if (!this.cachedRecentMod) await this.cleanCachedRecent('cachedRecentMod'); + //подстраховка хранения ключа, восстановим из IndexedDB при проблемах в localStorage + if (!this.serverStorageKey) { + const key = await ssCacheStore.getItem('storageKey'); + if (key) + this.commit('reader/setServerStorageKey', key); + } + if (!this.serverStorageKey) { //генерируем новый ключ await this.generateNewServerStorageKey(); @@ -123,6 +132,7 @@ class ServerStorage { async generateNewServerStorageKey() { const key = utils.toBase58(utils.randomArray(32)); this.commit('reader/setServerStorageKey', key); + //дождемся serverStorageKeyChanged, событие по watch не работает при this.inited == false await this.serverStorageKeyChanged(true); } @@ -141,6 +151,10 @@ class ServerStorage { async serverStorageKeyChanged(force) { if (this.prevServerStorageKey != this.serverStorageKey) { this.prevServerStorageKey = this.serverStorageKey; + + //сохраним ключ также в IndexedDB, чтобы была возможность восстановить при проблемах с localStorage + await ssCacheStore.setItem('storageKey', this.serverStorageKey); + this.hashedStorageKey = utils.toBase58(cryptoUtils.sha256(this.serverStorageKey)); this.keyInited = true;