Использование Promise для функции, которая не вызывается JavaScript - PullRequest
0 голосов
/ 02 июля 2019

Я использую Google Sign-In и у меня возникает следующая проблема:

sessionStorage.getItem('userEntity') возвращает null, когда я закрываю браузер и снова открываю его.Он не возвращает ноль, если я просто перезагружаю страницу.

Сессия будет установлена ​​в этой функции:

// Signing in
function onSignIn(googleUser) {
    var profile = googleUser.getBasicProfile();

    // Store the entity object in sessionStorage where it will be accessible from all pages
    let userEntity = {};
    userEntity.id = profile.getId();
    userEntity.name = profile.getName();
    userEntity.img = profile.getImageUrl();
    userEntity.email = profile.getImageUrl();
    sessionStorage.setItem('userEntity',JSON.stringify(userEntity));

    userIsLoggedOut.style.display = 'none';
    userIsLoggedIn.style.display = 'flex';
    document.querySelector('.user-img').setAttribute('src', userEntity.img);
}

Я не запускаю эту функцию в JavaScript.Следующий HTML заставит его работать:

<div class="g-signin2" data-onsuccess="onSignIn"></div>

Даже если я поставлю console.log(sessionStorage.getItem('userEntity')) после функции или в нижней части моего JavaScript, он все равно возвращает ноль.

Я полагаю, что решение будет использовать Promise, но как я могу использовать его, если я не запускаю функцию onSignIn() в JavaScript?

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Вы можете скопировать элемент из sessionStorage в localStorage:

localStorage.setItem('userEntity', sessionStorage.getItem('userEntity'));

Он будет постоянным, поэтому вы можете использовать его в любое время:

localStorage.getItem('userEntity');
1 голос
/ 02 июля 2019

Данные, хранящиеся в SessionStorage, удаляются при закрытии вкладки или браузера, более подробная информация приведена ниже: https://www.w3schools.com/jsref/prop_win_sessionstorage.asp

Вместо этого вы можете использовать localStorage, чтобы хранить данные в браузере, даже если вы закрываете вкладку или браузер, поэтому измените следующую строку:

sessionStorage.setItem('userEntity',JSON.stringify(userEntity));

по

localStorage.setItem('userEntity',JSON.stringify(userEntity));

Но вы должны позаботиться о безопасности информации, хранящейся в localStorage, вы можете иметь дело с безопасными cookie-файлами, если вам нужно хранить защищенные данные на стороне клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...