Приложение AngularJs - несколько вкладок браузера

0

Я разрабатываю приложение в AngularJS, вот контекст:

  • Я использую OAuth2 и сохраняю токен в localStorage и в переменной
  • Каждый раз, когда токен почти истек, я обновляю токен в переменной, а затем обновляю токен локального хранилища

Я столкнулся с проблемой:

  • Если я открою новую вкладку браузера с тем же приложением (ctrl + клик по ссылке), приложение 2 обновит токен, и один из них будет деконструирован

Вот мой вопрос:

  • Каков наилучший способ обработки нескольких приложений angularjs в одном браузере, используя тот же токен локального хранилища?

Решением, которое я себе представлял, является создание уникального идентификатора при запуске приложения (текущая временная метка + случайное значение), и каждая вкладка идентифицируется с этим идентификатором. Проблема заключается в том, что у меня будет параллелизм на localStorage, если 2 приложения читают/записывают одновременно, они могут писать поверх данных, написанных другим.

Теги:

1 ответ

1

Один из вариантов - не дождаться истечения срока действия маркера. Но случайное количество времени до его истечения (число, которое вы могли бы создать при запуске приложения, например).

Затем, когда одно из приложений достигает этой точки времени, он запрашивает новый токен с сервера и сохраняет его в localStorage (а также обновляет заголовок $ http или все, что вы используете).

Ваше приложение также должно прослушивать изменения в localStorage, например, эта вкладка будет уведомлена о наличии нового токена и должна обновить его переменную, а также заголовок $ http (или снова все, что вы используете).

убедитесь, что при выполнении вашей случайной функции вы убедитесь, что разница во времени значительна (не пара секунд), иначе вы все равно можете запросить 2 токена, потому что другая вкладка все еще ожидает ответа.

  • 0
    Я написал «почти истек», к деталям я обновляюсь, когда достигаю 80% времени expired_time. Проблема не в генерации идентификатора, а в том, что если я сохраню в localStorage список текущих идентификаторов того же приложения, мне придется проанализировать переменную localStorage, которую я использую, затем добавить идентификатор, а затем сохранить его. В течение этого времени другая вкладка могла сделать то же самое, поэтому идентификатор первой вкладки будет удален (параллелизм). Настоящий pb - это параллелизм в localStorage.
  • 0
    Я не совсем уверен, зачем вам этот уникальный идентификатор (возможно, я скучаю по картинке). При использовании случайного смещения по времени от истечения срока действия нет необходимости хранить его в localStorage. Только фактическое время истечения, так что все ваши приложения могут рассчитать их смещение. (и сохраните это в переменной, а не в localStorage).
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню