我在Angular 8中获得了(oidc-client.js)+ .Net Core IdentityServer4处理的授权。
一切似乎都正常,但是当我在第二个选项卡中打开相同的应用程序时,则需要我再次登录。 IdentityServer4具有cookie,因此单击“登录”按钮就足够了,并且将收到新令牌,而无需再次提供登录名/密码。无论如何还是很烦人。
有什么办法解决吗?我发现question on githubg可能会有所帮助。
有人建议需要将令牌本地化从 LocalStorage 更改为 SessionStorage 。但是个人来说 SessionStorage 更好,我会保留在那个位置。
答案 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]);
}
}
});