Угловое приложение с oidc-client.js требует авторизации во второй вкладке - PullRequest
4 голосов
/ 27 июня 2019

У меня авторизация в Angular 8, обработанная (oidc-client.js) + .Net Core IdentityServer4.

Кажется, все работает нормально, но когда я открываю то же самое приложение во второй вкладке, от меня требуется войти снова. IdentityServer4 имеет cookie, поэтому достаточно нажать кнопку входа , и новый токен будет получен без повторного ввода логина / пароля. Во всяком случае, это все еще раздражает.

Есть ли способ ее решить? Я нашел вопрос на githubg , который может быть частично полезным.

Некоторые люди считают, что необходимо изменить локализацию токена с LocalStorage на SessionStorage . Но лично SessionStorage лучше, и я бы оставил его там.

1 Ответ

0 голосов
/ 01 июля 2019

Если вы хотите использовать SessionStorage (что кажется правильным) на нескольких вкладках, вы можете скопировать данные между вкладками, например, используя событие LocalStorage (см. Пример кода ниже). ) или BroadcastChannel , как описано в этом Q & A , или внедрить автологин, как альтернативное решение делает .

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