Как разделить локальное хранилище между разными поддоменами? - PullRequest
0 голосов
/ 31 января 2020

У нас есть два отдельных веб-сайта / приложения в одном и том же домене, но в разных поддоменах.

Например,

https://hello.website.com (Webapp 1)
https://world.website.com (Webapp 2)

Что мы хотели бы сделать, это войти в систему пользователей в Webapp 1 и при входе в систему. и нажав кнопку в Webapp 1, мы бы хотели перенаправить пользователя в Webapp 2. Однако для Webapp 2 требуется тот же токен аутентификации, который в данный момент хранится в локальном хранилище Webapp 1. Как сделать содержимое localalstorage доступным для Webapp 2?

Или есть лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 31 января 2020

Поскольку домены не совпадают, передача информации из локального хранилища одного из них в другое невозможна напрямую , но, поскольку сайты работают по протоколу HTTPS, это должно быть безопасно и достаточно просто. отправить токен аутентификации в качестве параметров поиска. Например, при перенаправлении вместо перенаправления на https://world.website.com вместо этого возьмите текущий токен аутентификации для https://hello.website.com и добавьте его, затем redirect:

const url = 'https://world.website.com?token=' + authToken;
window.location.href = url;

(если аутентификация токен может содержать специальные символы, вам может понадобиться сначала их экранировать)

Затем в другом домене проверьте, есть ли token в параметрах поиска, и если да, извлеките его и сохраните его в localStorage:

const paramsMatch = window.location.href.match(/\?.+/);
if (paramsMatch) {
  const params = new URLSearchParams(paramsMatch[0]);
  const authToken = params.get('token');
  if (authToken) {
    localStorage.authToken = authToken;
  }
}

Поскольку домены работают по протоколу HTTPS, поместить маркер в URL безопасно - перехватчики не смогут его увидеть.

1 голос
/ 31 января 2020

Это ограничение localstorage и sessionstorage. Ты не можешь С iframe есть некоторые обходные пути, но они не элегантны и не защищены. Вы должны использовать cook ie с соответствующим атрибутом домена domain=example.com. Вы также можете прочитать следующий ответ для обеспечения безопасности вместе с cook ie vs localstorage: { ссылка }

...