5

我在 (oidc-client.js) + .Net Core IdentityServer4 处理的 Angular 8 中获得了授权。

一切似乎都很好,但是当我在第二个选项卡中打开同一个应用程序时,它需要我再次登录。IdentityServer4 有 cookie,因此单击登录按钮就足够了,无需再次提供登录名/密码即可接收新令牌。无论如何,它仍然很烦人。

有什么办法解决吗?我在 githubg 上发现了可能有部分帮助的问题。

有人建议需要将令牌本地化从LocalStorage更改为SessionStorage。但个人SessionStorage更好,我会把它放在那个地方。

4

1 回答 1

0

如果您想在多个选项卡中使用SessionStorage(这似乎是正确的),您可以在选项卡之间复制其数据,例如使用LocalStorage事件(参见下面的代码示例)或BroadcastChannel,如本问答中所述,或者实现自动登录,就像替代解决方案一样

(function(){

    if (!sessionStorage.length) {
        // trigger the event to get anything from other tabs
        localStorage.setItem('getSessionStorage', Date.now());
    };

    window.addEventListener('storage', function(event) {

    if (event.key == 'getSessionStorage') {

        //set and remove, so do not really keep the data in LS, but push it into event 
        localStorage.setItem('sessionStorage', JSON.stringify(sessionStorage));
        localStorage.removeItem('sessionStorage');

    } else if (event.key == 'sessionStorage' && !sessionStorage.length) {

        var data = JSON.parse(event.newValue);

        for (key in data) {
            sessionStorage.setItem(key, data[key]);
        }
    }
});
于 2019-07-01T17:01:34.657 回答