OfficeRuntime.storage 适配 oidc-client.js 中的 WebStorageStateStore
WebStorageStateStore 接口
WebStorageStateStore 将对底层存储的访问统一为如下 4 种操作:
- Promise set(key, value)
- Promise get(key)
- Promise remove(key)
- Promise getAllKeys()
需要注意的是返回类型都不是直接值,而使用 Promise 进行了封装。
对于基本的 Web 存储来说,它们都是一种 Storage,操作的返回值都是直接值,而不是 Promise。以 localStorage 为例,它提供了了:
- None(undefined) setItem(keyName, keyValue)
- string getItem(keyName)
- None(undefined) removeItem(keyName)
在 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);
}
}
OfficeRuntime.storage
与标准的 Web Storage 不同,这个 Storage 的返回类型已经是 Promise 了。
- Promise
setItem(keyName, keyValue) - Promise<string | null> getItem(keyName)
- Promise
removeItem(keyName)
实现 OfficeRuntimeStorage 接口
因为 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;
}
}
使用 OfficeRuntimeStorage
文档中的说明: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 })
浙公网安备 33010602011771号