冠军

导航

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);
    }
}

源码:https://github.com/DuendeArchive/identity-model-oidc-client-js/blob/release/src/WebStorageStateStore.js

OfficeRuntime.storage

与标准的 Web Storage 不同,这个 Storage 的返回类型已经是 Promise 了。

  • Promise setItem(keyName, keyValue)
  • Promise<string | null> getItem(keyName)
  • Promise removeItem(keyName)

见:https://learn.microsoft.com/en-us/javascript/api/office-runtime/officeruntime.storage?view=common-js-preview

实现 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 })

参考资料

posted on 2025-07-30 09:53  冠军  阅读(12)  评论(0)    收藏  举报