具有oidc-client.js的Angular应用程序需要在第二个选项卡中登录

时间:2019-06-27 13:31:55

标签: angular authorization identityserver4 session-storage oidc-client-js

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

一切似乎都正常,但是当我在第二个选项卡中打开相同的应用程序时,则需要我再次登录。 IdentityServer4具有cookie,因此单击“登录”按钮就足够了,并且将收到新令牌,而无需再次提供登录名/密码。无论如何还是很烦人。

有什么办法解决吗?我发现question on githubg可能会有所帮助。

有人建议需要将令牌本地化从 LocalStorage 更改为 SessionStorage 。但是个人来说 SessionStorage 更好,我会保留在那个位置。

1 个答案:

答案 0 :(得分:0)

如果您想在多个标签中使用 SessionStorage (似乎是正确的),则可以在标签之间复制其数据,例如使用LocalStorage事件(请参见(如下面的BroadcastChannel中所述)或Q&A,或实现自动登录,就像其他解决方案does一样。

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