代码之家  ›  专栏  ›  技术社区  ›  catandmouse

如何在不同的子域之间共享本地存储?

  •  0
  • catandmouse  · 技术社区  · 4 年前

    我们有两个不同的网站/应用程序在同一个领域,但不同的子域。

    例如。

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

    我们想做的是在Webapp 1上登录用户,登录并单击Webapp 1中的按钮后,我们想将用户重定向到Webapp 2。但是,Webapp 2需要当前存储在Webapp 1的localstorage中的相同身份验证令牌。如何使本地存储内容可用于Webapp 2?

    还是有更好的办法?

    2 回复  |  直到 4 年前
        1
  •  3
  •   CertainPerformance    4 年前

    由于域不同,因此无法将信息从其中一个域的本地存储传输到另一个域 直接地 https://world.website.com ,取而代之的是当前的身份验证令牌 https://hello.website.com 加上它, 重定向:

    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中 is safe -窃听者将看不到它。

        2
  •  1
  •   Saptarshi Basu    4 年前

    这就是我们的局限性 localstorage sessionstorage iframe domain=example.com . 对于cookie与localstorage的安全性,您可能还需要阅读以下答案: https://stackoverflow.com/a/54258744/1235935