











WebStorageStateStore 将对底层存储的访问统一为如下 4 种操作:
需要注意的是返回类型都不是直接值,而使用 Promise 进行了封装。
对于基本的 Web 存储来说,它们都是一种 Storage,操作的返回值都是直接值,而不是 Promise。以 localStorage 为例,它提供了了:
在 WebStorageStateStore 中,这些返回值被封装为了 Promise。
export class WebStorageStateStore {
constructor({prefix = "oidc.", store = Global.localStorage} = {}) {
this._store = store;
this._prefix = prefix;
}
set(key, value) {
key = this._prefix + key;
this._store.setItem(key, value);
return Promise.resolve();
}
get(key) {
key = this._prefix + key;
let item = this._store.getItem(key);
return Promise.resolve(item);
}
remove(key) {
key = this._prefix + key;
let item = this._store.getItem(key);
this._store.removeItem(key);
return Promise.resolve(item);
}
getAllKeys() {
var keys = [];
for (let index = 0; index < this._store.length; index++) {
let key = this._store.key(index);
if (key.indexOf(this._prefix) === 0) {
keys.push(key.substr(this._prefix.length));
}
}
return Promise.resolve(keys);
}
}
与标准的 Web Storage 不同,这个 Storage 的返回类型已经是 Promise 了。
因为 OfficeRuntime.Storage 的返回类型已经是 Promise 了,所以可以简化封装。下面是一个简单的示例。
export class OfficeRuntimeStorage {
constructor({prefix = "oidc.", store = Global.localStorage} = {}) {
this._store = store;
this._prefix = prefix;
}
set(key, value) {
key = this._prefix + key;
this._store.setItem(key, value);
return Promise.resolve();
}
get(key) {
key = this._prefix + key;
let item = this._store.getItem(key);
return item;
}
remove(key) {
key = this._prefix + key;
let item = this._store.getItem(key);
this._store.removeItem(key);
return item;
}
getAllKeys() {
let keys = this._store.getKeys();
return keys;
}
}
文档中的说明:https://github.com/DuendeArchive/identity-model-oidc-client-js/wiki
userStore: (default: session storage): Storage object used to persist User for currently authenticated user. E.g. userStore: new WebStorageStateStore({ store: window.localStorage })
使用 OfficeRuntimeStorage 的示例如下:
userStore: new OfficeRuntimeStorage({ store: OfficeRuntime.storage })
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。